Bash 杀死eval';电沉积过程
就拿这个脚本来说,仅仅是一个例子Bash 杀死eval';电沉积过程,bash,eval,kill,Bash,Eval,Kill,就拿这个脚本来说,仅仅是一个例子 #/垃圾箱/垃圾箱 foo() { 评估“$@” } 触摸栏 foo-tail-f条& 睡眠1 杀死美元! 在这个例子中,我想杀死tail,但是因为tail是作为eval的结果调用的,所以它不会被杀死。如果不使用pgrep,pkill等,我怎么能杀死tail呢?使用exec应该可以 #/垃圾箱/垃圾箱 foo() { 执行官“$@” } 触摸栏 foo-tail-f条& 睡眠1 杀死美元! 如果与管道一起使用,则需要进行流程替换 foo tail -f ba
#/垃圾箱/垃圾箱
foo()
{
评估“$@”
}
触摸栏
foo-tail-f条&
睡眠1
杀死美元!
在这个例子中,我想杀死
tail
,但是因为tail
是作为eval
的结果调用的,所以它不会被杀死。如果不使用pgrep
,pkill
等,我怎么能杀死tail
呢?使用exec
应该可以
#/垃圾箱/垃圾箱
foo()
{
执行官“$@”
}
触摸栏
foo-tail-f条&
睡眠1
杀死美元!
如果与管道一起使用,则需要进行流程替换
foo tail -f bar > >(tee baz) &
这是因为,当你
杀死$代码>,实际上是子shell(foo&),它被SIGTERM
杀死。您没有终止tail
命令
正如svnpenn所提到的,使用exec
,子shell的PID由tail
继承
或使用以下代码进行树遍历:
kill `ps -C tail --ppid $! -opid=`
它将列出pid为$的所有尾部进程(-C tail
)!(--ppid$!
)&仅打印其PID-opid=
&然后删除该PID。您试图解决的实际问题是什么?你在这里同时做了几件没用的事。