使linux"等待"命令等待所有子进程

Dan*_*Dan 7 linux bash wait

等待不等待所有子进程停止.这是我的脚本:

#!/bin/bash

titlename=`echo "$@"|sed 's/\..\{3\}$//'`
screen -X title "$titlename"

/usr/lib/process.bash -verbose $@

wait

bash -c "mail.bash $@"
screen -X title "$titlename.Done"
Run Code Online (Sandbox Code Playgroud)

我没有访问/usr/lib/process.bash,但它是一个经常更改的脚本,所以我想引用它...但在该脚本中:

#!/bin/ksh
#lots of random stuff
/usr/lib/runall $path $auto $params > /dev/null 2>&1&
Run Code Online (Sandbox Code Playgroud)

我的问题是runall创建了一个日志文件...而mail.bash假设要将该日志文件邮寄给我,但是等待不等待runall完成,它似乎只是等待process.bash完成.无论如何,有没有访问process.bash,或试图保持我自己的最新版本的process.bash,以使等待正确等待runall完成?(日志文件会覆盖以前的运行,所以我不能只检查是否存在日志文件,因为总有一个存在)

谢谢,丹

eph*_*ent 8

(
    . /usr/lib/process.bash -verbose $@
    wait
)
Run Code Online (Sandbox Code Playgroud)

而不是让操作系统启动process.bash,这会创建一个子shell,运行所有命令,process.bash就像它们被输入我们的shell脚本一样,并在子shell中等待.

这有一些警告,但如果你没有做任何不寻常的事情,它应该有效.

  • 要让Ctrl-C终止后台进程,请使用trap和kill:`pid = $!; 陷阱"kill $ pid;等待$ pid;退出0"SIGINT SIGTERM; 等待$ pid` (3认同)

Ign*_*ams 5

wait只等待直系孩子;如果任何孩子产生自己的孩子,它不会等待他们。