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

时间:2013-05-31 20:06:46

标签: bash gnu-parallel

我想创建一个Bash脚本来启动并行子进程。有没有办法这样做,以便子脚本仍然接收发送到父进程的信号?

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

for (( i=0; i<9; i++ ))
   {
   { echo $i start ; sleep 5s ; echo $i complete ; } &
   }
wait

因为这在C程序中自动运行(使用fork/exec),我相信它应该可以在不使用基于trap的信号转发的情况下实现 - 它本身可以在之前被中断信号被转发。

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

我认为答案就在这里,但我不知道如何将其翻译为Bash:Signal sent to both child and parent process

1 个答案:

答案 0 :(得分:1)

听起来好像你使用GNU Parallel也好 - 只是没有xargs风格。

使用功能可以吗?

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

或避免管道:

parallel -u doit ::: {1..10}