我经常打开许多终端,其中一些正在运行重要的进程(例如服务器),而另一些则没有运行任何东西并且可以关闭。如果您按“重要”,则会弹出确认提示Cntrl
+Shift
+Q
在其中,如下所示。
我想要一个(bash)脚本,它可以关闭所有终端,但将“重要”终端保留在上面所示的模式中。从https://askubuntu.com/questions/608914/ opening-all-instances-of-terminal-at-once-cleanly https://askubuntu.com/questions/608914/closing-all-instances-of-terminal-at-once-cleanly,我获得了以下脚本:
#!/bin/bash
xdotool search --class "terminal" | while read id
do
xdotool windowactivate "$id" &>/dev/null
xdotool key ctrl+shift+q
sleep 0.2
done
然而,我在运行脚本后发现一些“不重要”的终端仍然保持打开状态。上面的脚本可能有错误吗?
另一种方法是杀死任何空闲的bash
进程,即没有子进程的进程。这也应该关闭它们的父终端窗口。它会比xdotool
+ sleep 0.2
method.
这是我如何查看我的进程树的方法bash
流程:
pgrep bash | xargs -r -n1 pstree -p -c
output:
bash(1470)───startx(1546)───xinit(1568)─┬─Xorg(1569)─┬─{Xorg}(1570)
│ ├─{Xorg}(1571)
│ └─{Xorg}(1572)
└─dwm(1575)
bash(1582)
bash(4004)
bash(4125)
bash(28105)───nvim(17279)─┬─R(17956)─┬─{R}(17958)
│ ├─{R}(17959)
...
第一个和最后一个bash
这里有子进程,我不想杀死它们。中间的三个可以安全地被杀死,这也将关闭它们的父终端窗口。首先,我将通过过滤掉任何带有“的行来仅选择那些-
":
pgrep bash | xargs -r -n1 pstree -p -c | grep -v \-
output:
bash(1582)
bash(4004)
bash(4125)
接下来,我将使用grep
再次仅包含进程 ID 号:
pgrep bash | xargs -r -n1 pstree -p -c | grep -v \- | grep -o '[0-9]\+'
output:
1582
4004
4125
最后,杀死他们:
pgrep bash | xargs -r -n1 pstree -p -c | grep -v \- | grep -o '[0-9]\+' | xargs -r kill
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)