杀死Linux中的后台进程

时间:2016-08-07 15:30:11

标签: linux bash concurrency process kill-process

我正在尝试为我的项目构建启动脚本和停止脚本。我需要运行sass自动编译器和服务器,并将两者的输出重定向到文件。我正在使用lite-serversass --watch

为了让这些进程同时运行,我使用&来处理这些进程。这带来了停止脚本的挑战,我不能像往常一样使用Ctrl+C来停止脚本。我想我会通过将进程ID存储在文本文件中来克服这个问题。

我想出了以下内容" start"脚本:

# Start a sass watcher and a server running simultaneously. Store the PIDs in a
# text file so that the processes can be easily stopped.

(
  lite-server &
  echo $! > .pids.txt &
  sass --watch sass:css --style=compressed &
  echo $! >> .pids.txt &
) &> log.txt
cat .pids.txt

然后,为了停止这些过程,我使用

kill $(cat .pids.txt)

将进程ID写入文本文件似乎有点hackish。有没有更好的方法来完成我想要做的事情?

3 个答案:

答案 0 :(得分:3)

我可能更喜欢grep进程并终止进程而不是将PID保存在文件中。

ps -ef | grep lite-server | awk '{print $2}' | kill -9

我假设ps -ef输出中的第二列是服务器中进程lite-server的PID。

答案 1 :(得分:2)

你应该添加你想要的那种“杀戮”。 例如:kill -9 $(cat .pids.txt)

答案 2 :(得分:1)

你可以将它们存储在一个数组中,如果这样你就不会称之为hackish。

修改 另一种方法是执行:

kill $(jobs -p)

这会杀死所有后台进程(作业-p将所有后台进程的PID打印到stdout,然后将其移交给kill)。