0

我想创建一个 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

4

1 回答 1

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}
于 2013-07-07T14:10:10.273 回答