如何终止shell脚本中的分叉进程



我正在尝试同时运行多个命令。我在一个脚本中准备它,将每个命令附加到一个看起来像的命令中

and=" & "
command=$command1$and$command2
eval $command

然而,当我运行此命令时,每个命令都会被分叉并正确完成,但它会挂在命令行,并且永远不会返回到提示符。

示例(脚本run.sh)。如果这两个命令是:

command1="echo 'Hello'"
command2="echo 'World'"

则输出为:

person: ./run.sh
Hello
World
## It Hangs here

而不是

person: ./run.sh
Hello
World
person: 

那么,我如何终止分叉的进程,或者让脚本块直到分叉的进程完成?

假设您的示例被简化了(因为'echo'应该立即完成并返回到提示符),您只需要后台执行第二个命令。IOW,尝试:

command="$command1 & $command2 &"

请注意,我已经删除了您的"and"变量,因为它只是混淆。单个&决不是and操作。

你得到的输出是这样的吗:

~/dev/other $ echo foo &
[1] 522
~/dev/other $ foo
▯ # blink, blink, blink…

在这种情况下,被返回到提示,但提示在echo完成之前出现,因此要echo ed的字符串出现在提示之后,后面跟着一行换行符。您可以在提示后的新行中编写下一个命令,或者只需点击enter即可获得新提示。

如果在脚本中发生这种情况,可以将内置的wait添加到脚本的末尾,以确保脚本在其所有后台子进程完成之前不会返回提示。

我认为您的命令应该是这样的:

command= $command1$and$command2$and

最新更新