我正在尝试为我的项目构建启动脚本和停止脚本。我需要运行sass自动编译器和服务器,并将两者的输出重定向到文件。我正在使用lite-server
和sass --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。有没有更好的方法来完成我想要做的事情?
答案 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)。