簡體   English   中英

如何在使用 linux 中的 shell 腳本殺死進程時獲取退出代碼 = 0

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM