suspend
Bashに組み込まれたコマンドです。いつこのコマンドを自然に使用し、役に立つと思いますか?
ベストアンサー1
screen
GNUおよびtmux
(およびX11がないと仮定すると、そして仮想コンソール)ログインシェルと他のインタラクティブシェルを切り替えたいです。
まずコンソールにログインし、新しいシェルを起動してログインシェルを一時的にブロックします。ログインシェルを返し、そこでいくつかの操作を実行するには、を実行する必要がありますsuspend
。fg
その後、インタラクティブシェルに戻り、そこでやっていたことを続けます。
実際、ジョブ制御を使用すると、ログインシェルはバックグラウンドジョブとして複数の対話型シェルを作成でき、それを使用して切り替えることができます。fg %1
ただし、ログインシェルに戻るには、以下をfg %2
使用する必要があります。suspend
kill -s STOP $$
また、インタラクティブシェルのプロンプトでCtrl+は一時Z停止されないことに注意してください。
編集する:もともとスクリプトで使用する方法の長いwhat-ifセクションがありましたが、suspend
コマンドにはジョブ制御が必要で、非対話型シェルには通常ジョブ制御がないため、そのセクションを削除しました。
削除された部分はsuspend
次のように置き換えられますkill -s STOP $$
(これは実際にはもはや答えには属しませんが、とにかく他の人にとって興味深いことがあります)。
スクリプトにバックグラウンドプロセス(スクリプト)があり、どの段階でバックグラウンドプロセスを停止し、親プロセスが実行を続行するのを待つ必要があるとします。これは、親にファイルを抽出して所定の位置に移動する時間を与えるためのものです。
サブスクリプトは一時停止し、親スクリプトは続行できるときにkill -s STOP $$
シグナルを送信します。CONT
これは、親プロセスと子プロセスの間である種の同期を達成する機会を提供します(非常に基本的ですが、親シェルプロセスは子プロセスが中断されたと推測する必要があるため、子プロセスを許可することで解決できます)。 )CONT
早すぎると、この信号を受信するとトラップされ、一時停止しません。)