Shell-Script
如何 pgrep 在 macOS 上查找 bash 腳本(或如何以程式方式終止在後台執行的腳本)?
我正在嘗試以程式方式終止作為後台程序執行的 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 %