在 Linux 中终止后台进程

Kill background processes in Linux

我正在尝试为我的项目构建启动脚本和停止脚本。我需要 运行 一个 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 写入文本文件似乎有点老套。有没有更好的方法来完成我想做的事情?

您可以将它们存储在一个数组中,如果那是您不会称之为骇人听闻的话。

编辑: 另一种方法是只执行:

kill $(jobs -p)

这会杀死所有后台进程(jobs -p 将所有后台进程的 PID 打印到标准输出,然后将其交给杀死)。

你应该添加你想要的类型 "kill".. 如:kill -9 $(cat .pids.txt)

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

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

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