我有一个 bash 脚本,在其中运行 pkill 命令来终止正在运行的进程。我的用户名参数定义如下:
username=$(whoami)
我希望能够根据进程名称杀死进程,但也只为当前用户杀死它们。该脚本也将被其他用户使用,因此设置用户名参数,以便该脚本也适用于他们。
谁能告诉我该怎么做?我正在尝试以下操作:
pkill -f -U $username | "testProcess"
这是正确的方法吗?
答案1
testProcess
终止为当前用户调用的进程的语法是
pkill -x -U "$(id -u)" testProcess
我使用 u-ingid -u
并不是whoami
出于习惯,而是因为它id
在脚本中更常用whoami
。您可以使用预先存在的变量,例如$USER
或$LOGNAME
或类似的变量,具体取决于环境(但请记住,无论您使用什么,都要对扩展加双引号)。
如果您使用-f
,则被解释为正则表达式的模式将与所有进程的命令行进行匹配,而不仅仅是命令名称。对于-x
,模式需要匹配完整的字符串(在上面的情况下,进程的名称必须精确testProcess
,而不是,例如atestProcess2
;-x
与结合-f
需要匹配完整的命令行)。
您尝试的命令似乎想要将 的输出传递pkill
给名为 的命令testProcess
。这可能不是您想要的。
请注意,非 root 用户可能不会向其他用户的进程发出信号,因此除非用户是 root,否则该-U
选项及其选项参数并不是严格必需的(除非您想避免“不允许操作”错误)。