linux – 在前台生成并行进程

linux中使用bash是否有可能在前台产生并行进程?例如以下内容:

top.sh

#!/bin/bash

./myscript1.sh &
./myscript2.sh &

将并行生成两个进程作为后台线程.但是有可能将这些产生为前景线程吗?目的是在top.sh被杀死时自动杀死myscript1.sh和myscript2.sh.谢谢

解决方法:

您只能在前台拥有一份工作.您可以使脚本对任何到达它的信号做出反应,并将信号转发给其他作业.如果你想拥有一个杀死子进程的核心方法,你需要确保你的脚本可以使用:调用wait,这样你的脚本就不会退出,直到所有的工作都死掉或脚本本身被杀死.

#!/bin/bash
jobs=
trap 'kill -HUP $jobs' INT TERM HUP
myscript1.sh & jobs="$jobs $!"
myscript2.sh & jobs="$jobs $!"
wait

您仍然可以通过向它发送一个它没有捕获的信号来杀死包装脚本,例如SIGQUIT(我故意遗漏)或SIGKILL(无法捕获).

有一种方法可以将所有流程放在前台:通过管道连接它们.忽略SIGPIPE,以便进程的死亡不会杀死前一个进程.如果需要,可以通过其他文件描述符保存和恢复stdin和stdout.这样,脚本和后台任务将在同一个process group中,因此按下Ctrl C将同时终止包装器脚本和子进程.如果直接终止包装器脚本,那么不会影响子进程;你可以通过传递包装器脚本的PID的负数来杀死进程组(例如kill -TERM -1234).

trap '' PIPE
{
  myscript1.sh <&3 >&4 |
  myscript2.sh <&3 >&4
} 3<&0 4>&1
上一篇:Java:更改jLabel前景色


下一篇:java – 为什么我不能改变JButton的颜色?