首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何启动多个子进程,自动接收发送给父进程的信号

如何启动多个子进程,自动接收发送给父进程的信号
EN

Stack Overflow用户
提问于 2013-05-31 20:06:46
回答 1查看 996关注 0票数 0

我想要创建一个Bash脚本来启动并行子进程。是否有一种方法可以使子脚本仍然接收发送到父进程的信号?

下面是我想要启动子进程的大致方式,但这不符合我的信令标准。

代码语言:javascript
复制
for (( i=0; i<9; i++ ))
   {
   { echo $i start ; sleep 5s ; echo $i complete ; } &
   }
wait

因为这在C程序(使用fork/exec)中自动工作,所以我认为不使用trap-based信号转发应该是可能的--在信号被转发之前,转发本身就可能被中断。

解决这一问题的一个方法是使用GNU-parallel。我不知道它的机制是什么,但它解决了这个问题--只要您愿意将循环重构为xargs样式的语法。如果使用GNU-parallel选项,--semaphore不会解决这个问题。

我想答案在这里,但我不知道如何把它翻译成Bash:Signal sent to both child and parent process

EN

回答 1

Stack Overflow用户

发布于 2013-07-07 14:10:10

这听起来好像你可以使用GNU并行-只是不使用xargs风格。

使用函数可以吗?

代码语言:javascript
复制
doit() {
    # Trap 2 signals to show they are being given to the function
    trap 'echo you hit Ctrl-C/Ctrl-\, now exiting..; exit' SIGINT SIGQUIT
    echo $1 start
    sleep 5s
    echo $1 complete
}
export -f doit
seq 10 | parallel -u doit

或者为了避开管道:

代码语言:javascript
复制
parallel -u doit ::: {1..10}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16865123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档