subprocess.Popen( ["-c", "kill -SIGUSR2 %s" % master],
stdout=subprocess.PIPE, shell=True).wait()
我正在
kill: 1: Illegal option -S
指的是-SIGUSR2
。
如何将该参数完全传递为-SIGUSR2
?
PS:
如果我使用-s SIGUSR2
,我会收到kill: 1: invalid signal number or name: SIGUSR2
PPS:
如果我使用["-c", "kill", "-SIGUSR2", master]
我正在
kill: 1: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or
kill -l [exitstatus]
答案 0 :(得分:3)
SIG
是隐含的。
您想要-USR2
代替:
subprocess.Popen( ["-c", "kill -USR2 %s" % master],
stdout=subprocess.PIPE, shell=True).wait()
GNU coreutils
'kill
可以为您提供此列表。
$ /bin/kill --list|grep USR2
USR2
kill
而不是GNU的。您没有说明哪个shell,但根据结果,它可能是dash
而不是bash
。 bash
允许您使用-SIGUSR2
或-USR2
,但dash
不会。
$ dash -c 'kill -l' |grep USR
USR1
USR2
$ bash -c 'kill -l' |grep USR
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
$ bash -c 'kill -SIGUSR2 99999'
bash: line 0: kill: (99999) - No such process
$ bash -c 'kill -USR2 99999'
bash: line 0: kill: (99999) - No such process
$ bash -c 'kill -NOTASIGSPEC 99999'
bash: line 0: kill: NOTASIGSPEC: invalid signal specification
$ dash -c 'kill -SIGUSR2 99999'
dash: 1: kill: Illegal option -S
$ dash -c 'kill -USR2 99999'
dash: 1: kill: No such process
答案 1 :(得分:2)
我想你想要这样的东西:
subprocess.Popen(["-c", "kill -USR2 %s" % master],
stdout=subprocess.PIPE, shell=True).wait()
但是,SIGUSR2不是有效的sigspec。也许Brian Cain是正确的,但我看到的例子包括SIG。
答案 2 :(得分:1)
对我来说这很好用:
subprocess.Popen( ["-c", "kill -USR2 %s" % master],
stdout=subprocess.PIPE,shell=True).wait()