suspend
Bashの組み込みコマンドです。いつこのコマンドを自然に使用し、便利だと思いますか?
STOP
プロセスは子プロセスをフォークするときに中断されません(シグナルを受信しません)。また、2番目のコメントにも少し混乱しています。
wait()
私にとっては正しいと思います。私は、シェルが子プロセスをフォークするたびにシェルがそれ自体を一時停止すると言いました。停止信号の受信については何も言わなかったが、それは意味をなさないだろう。
suspend
Bashの組み込みコマンドです。いつこのコマンドを自然に使用し、便利だと思いますか?
STOP
プロセスは子プロセスをフォークするときに中断されません(シグナルを受信しません)。また、2番目のコメントにも少し混乱しています。
wait()
私にとっては正しいと思います。私は、シェルが子プロセスをフォークするたびにシェルがそれ自体を一時停止すると言いました。停止信号の受信については何も言わなかったが、それは意味をなさないだろう。
回答:
GNU screen
とtmux
(およびX11 と仮想コンソール)の両方が不足しているが、ログインシェルと別のインタラクティブシェルを切り替えたいとします。
最初にコンソールにログインし、次に新しいシェルを起動して、ログインシェルを一時的にブロックします。そこでログインシェルに戻って作業を行うには、を実行しますsuspend
。その後fg
、インタラクティブシェルを元に戻し、そこで行ったことを続行します。
実際、ジョブ制御を使用すると、ログインシェルはfg %1
、fg %2
などで切り替えることができるバックグラウンドジョブとして多数のインタラクティブシェルを生成できますが、ログインシェルに戻るには、suspend
手動で使用する場合を除き、使用する必要がありますkill -s STOP $$
。
また、対話型シェルのプロンプトでCtrl+を指定Zしても、中断されないことに注意してください。
編集:私は当初suspend
、スクリプトでの使用に関する長い仮説セクションを持っていましたが、コマンドにはジョブ制御が必要であり、非対話型シェルには通常ジョブ制御がないため、そのセクションを削除しました。
でsuspend
置き換えられたセクションを削除しましたkill -s STOP $$
(これは実際には回答に属していませんが、とにかく他の人にとって興味深いかもしれません):
スクリプトにバックグラウンドプロセス(スクリプト)があり、このバックグラウンドプロセスがある段階で停止し、親プロセスが処理を続行するのを待つ必要があるとします。これにより、親がファイルを抽出して所定の場所などに移動する時間を確保できます。
子スクリプトは一時停止(kill -s STOP $$
)し、親スクリプトはCONT
続行してもよいときにシグナルを送信します。
親プロセスと子プロセスの間に一種の同期を実装する機会を提供します(ただし、親シェルプロセスは多かれ少なかれ子プロセスが一時停止していることを推測する必要があるため、これは子を持つことで修正できますが、CONT
その信号があまりにも早く受信された場合、トラップしてサスペンドしない)。
fork/exec
、システムコールを