繁体   English   中英

Shell 脚本在杀死进程后返回非零值

[英]Shell script returning non zero value after killing process

我正在尝试使用 shell 脚本杀死一个进程。看起来 shell 本身在这个过程中被杀死了。 我还在终端中看到脚本的非零返回值。

我正在使用 sudo 在 Amazon Linux 2 上运行它。

#!/bin/bash
kill -9 $(ps -ef | grep myapp | grep -v grep | awk '{print $2}')

我执行如下:

sudo ./myscript.sh

“回声$?” 执行后返回 137 而不是零。 有人可以帮助了解发生了什么问题。

另一个观察:如果我直接在终端中运行 kill 命令,即在命令下面,

kill -9 $(ps -ef | grep myapp | grep -v grep | awk '{print $2}')

我看到回声$? 正在返回零。

更新:问题已解决。 我试图杀死的进程名称与我的脚本名称重叠。 因此 grep 返回两个 pid。 这两个过程都被杀死了。 还通过使用 pkill 或使用 pidof() 来获取 pid 了解了更好的方法。

如果您希望上次运行命令的退出代码成为脚本的退出代码,您的脚本必须以 exit $? 作为最后一行。 在此之前的任何 function 也必须以 $ 结尾? 所以链流向最后一行。 否则,正在发生其他一些退出。

如果脚本与您尝试杀死的应用程序或脚本一起被杀死,那么您的 ps 和 grep 工作很可能同时包含在结果中。 在脚本运行时查看 ps 的 output 和 grep。 你可以在你的杀戮线之前添加一行,它只显示 ps 和 greps 的 output,这样你就可以看到实际被杀的东西。

最后(我不认为是这种情况)如果您试图在杀死后结束脚本,请在脚本中的适当位置手动运行退出(再次可能使用 exit $? 出于上述原因)。

希望能帮助你到达你要去的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM