Shell-Script

如何 pgrep 在 macOS 上查找 bash 腳本(或如何以程式方式終止在後台執行的腳本)?

  • October 22, 2020

我正在嘗試以程式方式終止作為後台程序執行的 bash 腳本(在 macOS 上)。我現在確定的方式是pgrep腳本的名稱,然後將 PID 值傳遞給kill函式。

注意:如果有人對如何執行此操作有更好的建議,請隨時提供。

我遇到的問題是在 macOS 上,程序的名稱不僅僅是腳本的名稱,而是似乎是/bin/bash /Users/...../[scriptname]. 此外,我無法pgrep [scriptname]獲得 PID,而是必須獲得 PID,pgrep bash這通常會給我多個結果。

是否有人對 i)我如何pgrep正確使用kill此腳本或 ii)是否有更明顯/更清潔的方法來執行此操作?

注意:當我在 Lubuntu 中執行相同的腳本時,它沒有/bin/bash或完整目錄作為名稱的一部分,而只是稱為[scriptname]. 所以pgrep [scriptname]按預期工作。

是的 - macOS 在這方面非常混亂,但我認為pgrep並且pkill是解決這個問題的好方法:

% pgrep -U 502 -f sleepforever.sh
43894

一些解釋可能是有序的:

  • -U 502的真實使用者 ID是從id
  • sleepforever.sh是我創建的一個腳本來測試這個:
#!/bin/bash
while :
do
   sleep 10
done

pgrep實際上能做的就是找到pid. 要完成工作,請使用pkill- 它與以下內容共享許多參數pgrep

% pkill -U 502 -f sleepforever.sh
%

引用自:https://unix.stackexchange.com/questions/615737