我经常在这种情况下结束:
$ sudo something &
[1] 21838
$# Oh, shoot, it's hung, and assume the pid has scrolled off the screen
$ kill %1
-bash: kill: (21838) - Operation not permitted
$# Ah, rats. I forgot I sudo'ed that.
$# Wishful thinking:
$ sudo kill %1
kill: cannot find process "%1"
$# Now I have to use ps and find the pid I want.
$ ps -elf | grep something
$ ps -elf | grep sleep
4 S root 21838 1928 0 80 0 - 53969 poll_s 11:28 pts/2 00:00:00 sudo sleep 100
4 S root 21840 21838 0 80 0 - 26974 hrtime 11:28 pts/2 00:00:00 sleep 100
$ sudo kill -9 21838
[1]+ Killed sudo something
我真的想知道是否有更好的工作流程。我真的很惊讶没有一个bash表达式将%1变成一个pid号。
是否存在将%1转换为其底层pid的bash技巧? (是的,我知道我可以在发布时使用$保存它!)
答案 0 :(得分:4)
要获取作业的PID,请使用:count
,其中jobs -p N
是作业编号:
N
或者,更严格地回答您的问题,您可能会发现$ yes >/dev/null &
[1] 2189
$ jobs -p 1
2189
$ sudo kill $(jobs -p 1)
[1]+ Terminated yes > /dev/null
有用:它运行命令,用相应的PID替换作业规范:
-x
我个人认为$ yes >/dev/null &
[1] 2458
$ jobs -x sudo kill %1
[1]+ Terminated yes > /dev/null
更直观,但我得到了-p
的吸引力。