如何 pgrep 在 macOS 上查找 bash 脚本(或如何以编程方式终止在后台运行的脚本)?

如何 pgrep 在 macOS 上查找 bash 脚本(或如何以编程方式终止在后台运行的脚本)?

我正在尝试以编程方式终止作为后台进程运行的 bash 脚本(在 macOS 上)。我现在决定的方法是指定pgrep脚本的名称,然后将 PID 值传递给kill函数。

注意:如果有人对如何执行此操作有更好的建议,请随时提供。

我遇到的问题是,在 macOS 上,进程的名称不仅仅是脚本的名称,而且看起来是/bin/bash /Users/...../[scriptname].另外,我无法pgrep [scriptname]获取 PID,我必须pgrep bash获取,这通常会给我多个结果。

有没有人对以下方面有建议:i)我如何pgrep正确使用kill此脚本或ii)是否有更明显/更干净的方法来执行此操作?

注意:当我在 Lubuntu 中运行相同的脚本时,它没有/bin/bash完整目录作为名称的一部分,而只是称为[scriptname].所以pgrep [scriptname]按预期工作。

答案1

是的 - macOS 在这方面非常混乱,但我认为pgreppkill是解决这个问题的好方法:

% 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
%

相关内容