[英]How to kill all child processes spawned by a process started from a script on kill or kill -9
[英]kill processes started in parallel
我通过启动许多进程来启动我的应用程序,我使用脚本(bash)来启动它。
start.sh
,我使用sudo ./start.sh
来运行 start.sh
的脚本为: #!/bin/sh sudo p1 > p1.txt && p2 > p2.txt && p3 > p3.txt
要停止我的应用程序,我使用ctrl-c
但并非所有进程都停止。 我知道我可以用ps aux | less | grep ...
找到ps aux | less | grep ...
ps aux | less | grep ...
ps aux | less | grep ...
,这似乎很长,我想知道是否存在并且很容易等待停止我的进程。
更新抱歉,这是它(仅一个& )
sudo f1/p1.py > logs/p1.txt & sudo f2/p2.sh > logs/p2.txt & sudo nodemon f3/p3.js > logs/p3.txt
存储PID,并设置陷阱以在收到信号或退出时将其杀死:
#!/bin/bash
# ^^^^ - NOT /bin/sh, as this code uses arrays
pids=( )
# define cleanup function
cleanup() {
for pid in "${pids[@]}"; do
kill -0 "$pid" && kill "$pid" # kill process only if it's still running
done
}
# and set that function to run before we exit, or specifically when we get a SIGTERM
trap cleanup EXIT TERM
sudo f1/p1.py > logs/p1.txt & pids+=( "$!" )
sudo f2/p2.sh > logs/p2.txt & pids+=( "$!" )
sudo nodemon f3/p3.js > logs/p3.txt & pids+=( "$!" )
wait # sleep until all background processes have exited, or a trap fires
如果您知道在脚本中启动的进程名称,则可以执行类似的操作以杀死使用该名称的所有进程。
示例:杀死Skype进程
pkill skype
有关更详细的选项,请参阅man pkill
。
如果知道您的Shell PID(进程ID),则可以执行以下操作:
pkill -TERM -P PPID
其中PPID是您的Shell PID(子进程的父PID)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.