繁体   English   中英

终止并行启动的进程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM