1
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

PP:

如果我使用["-c", "kill", "-SIGUSR2", master]我得到

kill: 1: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or
kill -l [exitstatus]
4

3 回答 3

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

编辑:我的错误。您的示例使用的是 shellkill而不是 GNU。您没有说哪个外壳,但根据结果,它很可能dash而不是bash. bash将允许您使用-SIGUSR2or -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
于 2013-08-15T22:16:37.433 回答
2

我想你想要这样的东西:

subprocess.Popen(["-c", "kill -USR2 %s" % master], 
                 stdout=subprocess.PIPE, shell=True).wait()

但是,SIGUSR2 不是有效的 sigspec。也许Brian Cain是正确的,但我看到了包括 SIG 在内的例子。

于 2013-08-15T22:11:19.940 回答
1

对我来说,这很好用:

subprocess.Popen( ["-c", "kill -USR2 %s" % master],
                  stdout=subprocess.PIPE,shell=True).wait()
于 2013-08-15T22:18:20.127 回答