我有一个从新创建的shell运行的脚本。 操作系统是红帽企业Linux服务器版本5.4(Tikanga)。 在脚本检测到某个应用程序(由脚本启动)挂起的特定时刻,脚本尝试终止它启动的所有过程。我以为,终止当前用户在当前的shell启动的所有进程正确的命令是:pkill杀死由父shell中的其他用户启动的sshd进程
pkill /?
的问题是,它杀死了在母贝(由init.d中)开始的sshd和腻子控制台断开连接显示错误信息。
我在想:
- 怎么可能在特定的外壳特定用户终止过程中母贝其它用户开始了吗?
- 什么是正确的命令终止当前正在运行的脚本启动的所有进程?
我已经找到了一些解决方案,我存储所有PID和当脚本需要终止他们,我在循环运行以下命令:
[[email protected] ~]# pkill $(ps aux | grep $pid | awk '{print $2}')
不过,我要寻找一个衬里只是终止当前脚本启动的所有进程。
我用$(echo $$)替换静态进程id后试过了,它总是抱怨2个进程无法找到(kill 13925:No such process)。有什么想法吗? – aviad 2012-02-13 10:05:31
这是因为'ps'返回它自己的pid和'tail'的pid。你可以试试'ps opid --ppid = $$ | tail -n +2 | xargs睡眠“并在另一个终端运行'ps ax'。结果是'ps'和'tail'已经退出,但是'xargs'和'sleep'仍在运行。只需使用'ps opid --ppid = $$ | tail -n +2 | xargs kill&>/dev/null'。如果错误代码是问题,您可以追加'; true',因此退出代码始终为0. – core1024 2012-02-13 11:35:09