198

I use startx to start X which will evaluate my .xinitrc. In my .xinitrc I start my window manager using /usr/bin/mywm. Now, if I kill my WM (in order to f.e. test some other WM), X will terminate too because the .xinitrc script reached EOF. So I added this at the end of my .xinitrc:

while true; do sleep 10000; done

This way X won't terminate if I kill my WM. Now my question: how can I do an infinite sleep instead of looping sleep? Is there a command which will kinda like freeze the script?

4

11 に答える 11

425

sleep infinityそれが示唆することを正確に行い、猫の虐待なしで機能します。

于 2014-02-28T16:07:57.027 に答える
72

これは醜いように思えるかもしれませんが、実行catして永遠に入力を待機させないのはなぜですか?

于 2010-05-29T13:23:33.307 に答える
10

sleep infinity最もエレガントに見えますが、何らかの理由で機能しない場合があります。その場合はcatreadtail -f /dev/nullgrep aなどの他のブロッキング コマンドを試すことができます。

于 2014-11-25T13:41:44.953 に答える
7

SIGSTOPをそれ自体に送信するのはどうですか?

これにより、SIGCONTが受信されるまでプロセスが一時停止します。あなたの場合はどちらですか:決して。

kill -STOP "$$";
# grace time for signal delivery
sleep 60;
于 2011-01-29T06:50:38.727 に答える
3

最近、これを行う必要がありました。外部プログラムを呼び出さずに bash を永久にスリープさせる次の関数を思いつきました。

snore()
{
    local IFS
    [[ -n "${_snore_fd:-}" ]] || { exec {_snore_fd}<> <(:); } 2>/dev/null ||
    {
        # workaround for MacOS and similar systems
        local fifo
        fifo=$(mktemp -u)
        mkfifo -m 700 "$fifo"
        exec {_snore_fd}<>"$fifo"
        rm "$fifo"
    }
    read ${1:+-t "$1"} -u $_snore_fd || :
}

注: 以前に、ファイル記述子を毎回開いたり閉じたりするバージョンを投稿しましたが、一部のシステムでは、これを 1 秒間に何百回も実行すると、最終的にロックアップすることがわかりました。したがって、新しいソリューションでは、関数の呼び出し間でファイル記述子が保持されます。とにかく、Bashは終了時にそれをクリーンアップします。

これは /bin/sleep と同じように呼び出すことができ、要求された時間だけスリープします。パラメータなしで呼び出すと、永久にハングします。

snore 0.1  # sleeps for 0.1 seconds
snore 10   # sleeps for 10 seconds
snore      # sleeps forever

ここの私のブログに過度の詳細を含む記事があります

于 2017-11-27T22:43:18.833 に答える
0

--replaceウィンドウマネージャーを強制終了する代わりに、または可能であれば新しいウィンドウマネージャーを実行してみてください-replace

于 2010-05-29T13:35:22.860 に答える
-2
while :; do read; done

子供の睡眠プロセスを待つ必要はありません。

于 2016-06-02T08:11:31.587 に答える