[英]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.