Iev*_*gen 17 linux bash parallel-processing
ArchLinux (Manjaro)。
我正在运行一个 bash 文件。它运行 2 个进程(命令),使用&. 但是当我按Ctrl+C停止程序时 - 一个进程死了,另一个继续工作。
如何停止这两个进程?或者我如何编写一个新的脚本来杀死这两个进程?
lny*_*yng 22
更新:trap需要SIG根据条件删除前缀,尽管某些 shell 支持包含它。请参阅下面的评论。
&符号“&”在新进程的后台运行命令。当其父进程(在您的情况下运行 bash 脚本的命令)结束时,此后台进程会将其父进程重置为 init (进程为PID1),但不会死亡。当您按下 时ctrl+c,您是在向前台进程发送中断信号,不会影响后台进程。
为了杀死后台进程,您应该使用kill带有PID最近后台进程的命令,可以通过$!.
如果您希望使用ctrl+c杀死脚本和后台进程,您可以这样做:
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
Run Code Online (Sandbox Code Playgroud)
trap修改SIGINT(trap需要删除SIG前缀,但某些 shell 可能支持包含它)的陷阱处理程序, 因此脚本将在进程$BGPID退出之前终止进程。
| 归档时间: |
|
| 查看次数: |
15153 次 |
| 最近记录: |