【问题标题】:pkill given process depending on input argumentspkill 给定进程取决于输入参数
【发布时间】:2022-01-11 09:01:37
【问题描述】:

我正在运行一个名为test.py 的python 进程,我从带有输入参数的bash 脚本运行该进程。

$PWD/test.py -s $symbol -folder $folder -n $name -d $name

一旦运行ps -elf | grep test.py,就会出现带有参数的进程。

我正在尝试在同一个 bash 脚本中,在给定输入参数的情况下终止该进程:

pkill -f 'test.py -s $symbol -folder $folder -n $name -d $name'

但这似乎不起作用。

什么是正确的语法?我需要在某处添加括号() 或括号{} 吗?

【问题讨论】:

标签: bash input parameters pkill


【解决方案1】:

正如 @Aserre 在 cmets 中提到的,您需要在 pkill 命令中使用双引号而不是单引号,以便在字符串中替换 shell 变量的值。

另外,请注意pkill 默认发送SIGTERM。因此,test.py 应该有一个信号处理程序在收到 SIGTERM 时关闭。如果test.py 没有信号处理程序,它将忽略该信号并继续存在。如果是这种情况,请使用 pkill -9,这将杀死 ptest.py,因为信号 9 不能被忽略:

pkill -9 -f "test.py -s $symbol -folder $folder -n $name -d $name"

最后,我假设test.py 作为守护进程运行或以某种方式在后台运行。否则,您的 bash 脚本将等到它退出后再继续。如果test.py 不是守护进程,您的 bash 脚本可以在后台运行它。这是一个例子:

#!/usr/bin/env bash

symbol=pi
folder=/tmp
name=john
$PWD/test.py -s $symbol -folder $folder -n $name -d $name &
pid=$!
echo "killer: started test.py ($pid)..."

sleep 5
echo "killer: killing test.py..."

# you may use -9 instead of -SIGTERM
pkill -SIGTERM -f "test.py -s $symbol -folder $folder -n $name -d $name"
wait $pid
echo "killer: test.py is dead; exiting..."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2015-01-10
    • 2016-04-13
    • 2011-03-28
    • 2022-01-21
    • 2021-12-02
    • 2012-02-07
    • 2022-01-11
    相关资源
    最近更新 更多