如何关闭所有打开的终端窗口,除了运行shell脚本的窗口

时间:2017-11-14 09:07:07

标签: linux shell

我希望有一个能够杀死控制台窗口的脚本,无论是否正在运行,但同时保持执行此脚本的窗口。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以找到脚本(bash,sh,zsh等)的父命令名,然后使用该命令名终止所有进程。 这样你就可以杀死所有的bash进程,但是运行脚本。 即。

C=$(ps -p $(ps -p $$ -o ppid=) o args=)
P=$(ps -p $$ -o pid=)
for p in $(pgrep $C); do
    if [ $p -ne $P ]; then
        kill $p
    fi
done

这非常 可移植。如果你还想关闭运行某些东西的控制台,它就变得更不便携了:

C=$(ps -p $(ps -p $$ -o ppid=) o args=)
P1=$(ps -p $$ -o pid=)
P2=$(ps -p $$ -o ppid=)
echo $(pgrep $C)
for p in $(pgrep $C | tail -n +2); do
    [ $p -ne $P1 ] && [ $p -ne $P2 ] && kill -9 $p
done
  • 如果脚本是由另一个脚本启动的,那么它将不起作用 另一个bash会话中的bash会话(例如根会话)
  • 如果桌面环境是,它不会杀死第一个bash窗口 不是由bash启动的(例如,如果您将桌面环境设置为 在启动时运行),要解决此问题,您可以删除for循环中的| tail -n +2
  • 除窗户外,它还会关闭控制台标签