我对Linux很陌生。 事实上,我现在使用Cygwin而不是Linux本身。
我正在尝试安装RVM (Ruby版本pipe理器)。
我在做rm -r ./.rvm -i
命令。 我想删除.rvm
文件夹,看看我是如何被要求删除或不是文件/目录。 我看到了一些,并用Ctrl+Z
停止它,然后用Windows .rvm
删除整个.rvm
文件夹,只是将它发送到回收站。
但是当我想以退出命令退出terminal时,我收到一条消息,说我已经停止了工作:
$ jobs [1]+ Stopped rm -r ./.rvm -i
在这里,我读了如何杀死停止的工作:
kill `jobs -p`
但我决定尝试用pipe道命令的语法,我在这里读到:
pipe道中每个命令的输出通过pipe道连接到下一个命令的input
所以我做了这些尝试,但不能得到所需的结果:
$ jobs -p | kill $ jobs -p | kill -n 15 # 15 is SIGTERM signal $ jobs -p | kill -n=15 # got error wrong signal spec $ jobs -p | kill -s SIGTERM
我不明白为什么它不起作用。 jobs -p
列出进程ID:
$ jobs -p 340
所以340
ID必须去kill -n 15
命令,它应该杀死这个工作。 但是这并没有发生。 为什么? 在这种情况下是否可以使用pipe道?
kill
命令) xargs
,但是当有潜在的空间时(有时在其他情况下 ),必须小心。 在你的情况下,作业-p不应该有任何与xargs问题,你可以使用以下内容:
jobs -p | xargs kill
如果你喜欢,你也可以使用–verbose(或者-t)
jobs -p | xargs --verbose kill jobs -p | xargs -t kill
xargs
是一个强大的工具。 要非常小心地将input传递给它( find -print0
, grep -Z
和xargs -0
在处理文件时相处得很好)。 它非常值得使用它(有时节省时间)。
kill
不会从标准input中获取参数,如果您按照您的要求进行pipe道input,那么它们将出现在哪里。 使用kill
的唯一方法是将PID或PID列表指定为命令行参数。
如果SIGTERM(-15)不起作用,请尝试SIGKILL(-9)。 build议尽量先尝试SIGTERM。
kill `jobs -p` kill -9 `jobs -p`
在这种情况下,你可以input:fg,然后按ctrl-C。
如果你想直接杀死你的剩余进程,在bash下,你可以很容易地发出:
kill %1
这将杀死后台的第一个进程,如工作确定。