终止特定结果的终端进程

终止特定结果的终端进程

例如考虑以下情况:

我需要以 5 秒的时间间隔随机连续打印一些数字,并且如果遇到“2”的输出,我需要终止打印数字的终端过程。这可能吗?

我知道我可以在 c、c++、java 等中执行相同的操作。但我想使用 bash 脚本来执行此操作。

注意:: 如果仅“在”我遇到“输出”为“2”(或任何值)时才需要终止该过程,我强调这一点是因为“我需要为特定结果终止终端过程”。

答案1

bash shell 知道它的父进程,因此你可以执行以下操作:

(( number == 2 )) && kill $PPID

參考文獻:http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variables

答案2

您可以使用一个简单的if语句来做到这一点:

# your file reading code goes here, make sure $output is set
if [ $output -eq 2 ]; then return; fi

答案3

你想要的是终止运行脚本的 shell。这有点棘手,因为运行脚本将产生另一个 shell,而终止它的简单方法(kill -9 $$exit)将在衍生shell,而不是终端调用的那个。

我发现唯一可靠的方法是来源而不是运行脚本。因此,不要:

bash script.sh

做:

. script.sh

这将导致内容在调用 shell 中运行,而不是在生成的 shell 中运行。

脚本本身很简单,如另一个答案所示:

while true; do sleep 1; number=$RANDOM; echo $number; if [ 2 = 2 ]; then exit; fi; done

实际上,如果你在当前 shell 中以一行代码运行这个命令,它将要当看到值 2 时关闭终端。

你没有说随机数从何而来;我使用了内置的 RANDOM bash,它输出 0-32767 范围内的整数。

相关内容