微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐