我使用startx来启动X,这将计算我的.xinitrc。在我的.xinitrc中,我使用/usr/bin/mywm.启动我的窗口管理器现在,如果我杀死我的WM(为了f.e.测试其他一些WM), X也将终止,因为.xinitrc脚本到达了EOF。 所以我在.xinitrc的末尾添加了这个:

while true; do sleep 10000; done

这样,如果我终止WM, X就不会终止。现在我的问题是:我如何做一个无限睡眠而不是循环睡眠?是否有类似于冻结脚本的命令?


当前回答

while :; do read; done

没有等待孩子睡觉的过程。

其他回答

无限睡眠看起来很优雅,但有时因为某些原因它并不奏效。在这种情况下,您可以尝试其他阻塞命令,如cat, read, tail -f /dev/null, grep a等。

与其杀死窗口管理器,不如尝试使用——replace或-replace(如果可用的话)运行新的窗口管理器。

也许这看起来很丑,但为什么不直接运行cat,让它永远等待输入呢?

这种方法不会消耗任何资源来保持进程的活动。

while :; do :; done & kill -STOP $! && wait

分解

而:;做的事:;done &在后台创建一个虚拟进程 杀-停止$!停止后台进程 等待后台进程,这将永远阻塞,因为后台进程之前已经停止

笔记

只能从脚本文件中工作。

那么发送一个SIGSTOP给它自己呢?

这将暂停进程,直到接收到SIGCONT。在你的情况下,永远不会。

kill -STOP "$$";
# grace time for signal delivery
sleep 60;