Linux shell脚本:当第二个程序完成后,如何停止第一个程序?

Sop*_*rez 5 linux shell scripting

我在Linux中有两个程序(例如shell脚本):

NeverEnding.sh
AllwaysEnds.sh
Run Code Online (Sandbox Code Playgroud)

第一个广告永远不会停止,所以我想在运行它的背景.
第二个不会停止,没有问题.

我想创建一个Linux shell脚本调用它们,但是当第二个脚本完成时,它会自动停止(例如,kill).

如果需要,允许使用特定的命令行工具.

fej*_*ese 5

您可以将第一个发送到后台&并获取它的PID $!.然后在第二个完成后,你可以杀死第一个:

#!/bin/bash

NeverEnding.sh &
pid=$!

AllwaysEnds.sh

kill $pid
Run Code Online (Sandbox Code Playgroud)

实际上,您不需要将pid保存在变量中,因为$!只有在启动后台进程时才会更新它,这只是让它更容易阅读.

  • @SopalajodeArrierez您可以使用`AllwaysEnds.sh"$ @"`更改此脚本.它会将主脚本的所有参数传递给AllwaysEnds.sh`.有关详细信息,请参阅[本指南](http://www.tldp.org/LDP/abs/html/internalvariables.html).顺便说一下,它还解释了`$!`并包含了几个关于工作控制的例子. (3认同)
  • @fejese:[`"$ @"`在双引号内有特殊含义](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_05_02).它不像你想象的那样工作.请参阅[在bash shell脚本中传播所有参数](http://stackoverflow.com/q/4824590/4279) (2认同)