[英]How to get the exit code of spawned process in expect shell script?
[英]how to get Exit code=0 while killing a process using shell script in linux
我在 shell 腳本中使用“kill -9 pid”殺死多個進程,並且正如預期的那樣,退出代碼是非零的。
有什么方法可以在使用 pid 殺死進程的同時獲取退出代碼 0?
代碼片段:
echo $1 $2
for pid in $(ps -ef | grep "$1" | grep "$2" | grep "main-app" | grep -v grep | awk '{print $2}'); do
kill -9 $pid
exit 0
done
在一般情況下,進程被殺死時的退出代碼是不可預測的。
Bash 小心地將被殺死進程的退出代碼設置為 128 + 它被殺死的信號,因此kill -9
將始終導致 Bash 報告退出代碼 137。
特別是使用kill -9
,接收進程完全無法控制其退出代碼; 它只是立即被殺死。
無論如何,很難爭辯說,在任何情況下,當進程被強制中斷時,它應該報告成功。 當然,如果你可以控制進程的源代碼,你可以讓它在某些信號上顯式exit 0
(雖然同樣,不能處理無法處理的kill -9
)。
旁白:您基本上不應該使用kill -9
。 這是一個緊急停止,只能在不尋常的情況下使用(即使那樣你也應該知道你在做什么)。
另外,您想刪除那里的無用grep
。
for pid in $(ps -ef |
awk -v first="$1" -v second="$2" -v app="main-app" '
$0 ~ first && $0 ~ second && $0 ~ app && !/awk/ {print $2}')
do
kill "$pid"
done
您在那里的exit 0
將終止當前的 shell (當然,退出循環)。
順便說一句,鏈接頁面還有一個關於為什么要避免kill -9
的部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.