通过 ctrl-c 管道将 pid 杀死

通过 ctrl-c 管道将 pid 杀死

因此我有一个 Grunt 任务运行以下命令:

java -jar build/lib/plovr.jar serve ./someroot' + configurationFile + ' & grunt watch:sass

问题是,由于某种原因,当我按 ctrl-c 进入 shell 时,java 进程仍在继续运行。

我解决这个问题的想法是通过将 pid 传送到会话变量并添加另一个命令来杀死相同的 pid。

我不知道如何实现这一点,所以我需要帮助。另外,如果你能想到一个更简单的方法,我将不胜感激。

非常感谢

更新

当我切换正在运行的命令的顺序时,问题就解决了,就像这样

grunt watch && java -jar

所以当我按 ctrl-c 时,java 进程就会被终止。

无论如何,如果有人能教我如何执行我的第一种方法就好了。

答案1

当您在命令行上输入 & 符号时,它会将其前面的命令置于后台,这就是 Ctrl-C 无法停止它的原因。要终止它,您可以执行 kill $!(其中 $! 由 shell 替换为最后一个提交后台的任务)或使用 fg 命令将最后一个置于后台的任务移到前台,然后您可以使用 Ctrl-c。

相关内容