元々フォアグラウンドで実行されているプロセスがあります。Ctrl+ Zで中断し、バックグラウンドで実行を再開しbg <jobid>ます。
バックグラウンドで実行中のプロセスをどのように一時停止するのでしょうか?
バックグラウンドプロセスをフォアグラウンドにするにはどうすればよいですか?
編集:
プロセスはstderrに出力するのでfg <jobid>、プロセスが端末に出力している間にどのようにコマンドを発行する必要がありますか?
fg <jobid>して前景にすることができますか?
元々フォアグラウンドで実行されているプロセスがあります。Ctrl+ Zで中断し、バックグラウンドで実行を再開しbg <jobid>ます。
バックグラウンドで実行中のプロセスをどのように一時停止するのでしょうか?
バックグラウンドプロセスをフォアグラウンドにするにはどうすればよいですか?
編集:
プロセスはstderrに出力するのでfg <jobid>、プロセスが端末に出力している間にどのようにコマンドを発行する必要がありますか?
fg <jobid>して前景にすることができますか?
回答:
ティムが言っfgたように、最後のプロセスを最前面に戻すために入力します。
バックグラウンドで複数のプロセスが実行されている場合は、次を実行します。
$ jobs
[1] Stopped vim
[2]- Stopped bash
[3]+ Stopped vim 23
fg %3持参するvim 23フォアグラウンドに戻すプロセスを。
バックグラウンドで実行中のプロセスを一時停止するには、次を使用します。
kill -STOP %job_id
SIGSTOPシグナルは、本質的にCtrl+ と同じ方法でプロセスを停止(一時停止)Zします。
例:kill -STOP %3。
SIGCONT私のためです。私が使用kill -STOPしてkill -CONT、とにかく数字を覚えるに優先して、しかし、あなたは確認することができkill -l、数値の自分を思い出させるために
jobをどのように発行fg <jobid>する必要がありますか。また、プロセスは端末に出力しますか?
kill -STOP %job_id
これは、ジョブ制御を備えたシェルのすべてに当てはまります。ジョブ制御は、(ほとんどの場合)本当に古代のシェルを処理しない限り、当然のことと見なすことができます。 これはPOSIX標準に含まれてdashいるため、ジョブ制御をサポートすることもできます(対話式またはで実行する場合-m)。
bg最後に中断されたプログラムをバックグラウンドにしbg %2ジョブ番号と共に使用します。ジョブ番号はで確認できますjobs)fg 最近中断されたプログラムをフォアグラウンドにしますではzsh、fg別のCtrl+ を介してプロンプトから暗黙的に実行するキーバインディングを記述できますz。
_zsh_cli_fg() { fg; }
zle -N _zsh_cli_fg
bindkey '^Z' _zsh_cli_fg
おそらくbgサスペンド時に暗黙的に実行する巧妙な方法もありますが、賢明ではないようです。少なくとも私にとっては、Ctrl+のz使用の大部分はCtrl+ cが抜け出せないためです。私はそれに続いて、例えばkill %1ではなく、たとえばbg、デフォルトで殺すことを望まない!(このロジックは、このキーバインドを使用しなくなった理由にも拡張されます。プロセスを停止するためにCtrl+ zを叩いている場合、最後にやりたいことは再開です!)
別のシェルインスタンス(またはsudoコマンドを含むこともある別のユーザー)を使用している場合、ジョブ番号を使用できない可能性があります。
プロセスID(PID)がわかれば、別のプロセスを実行できます。PIDはpgrep …、またはps aux |grep …(または同じシェル、、jobs -lまたは$!)で取得でき、実行できます:
kill -STOP $PID # suspend
kill -CONT $PID # continue (resume)
プロセスIDがわからず、名前でプロセスの他のインスタンスを一時停止することを心配していない場合は、次のいずれかにシグナルを渡すことができます。
killall -STOP program_name
pkill -STOP program_name
pkill -f -STOP program_name_or_args
+でCONT停止した('d ではない)プログラムへのシグナルは、あなたが行った場合と同じように(フォアグラウンドで)進行を再開します。Ctrlzbgfg
この質問の編集は標準エラーについて尋ねます:
プロセスはstderrに出力するので
fg <jobid>、プロセスが端末に出力している間にどのようにコマンドを発行する必要がありますか?
問題のジョブにバックグラウンド化されたコンポーネントがある場合(または、おそらくを介してジョブ全体がバックグラウンド化されている場合)を除きkill -CONT、中断中の出力は実際には表示されません。
まだデータを出力している場合(標準出力または標準エラー)、端末は視覚的に混乱しますが、入力の一部ではないため、その出力はすべて無視されます。これにより、タイプミスを入力していないことがわかりにくくなる可能性がありますが、(盲目的に)入力fgEnterで十分です(複数のジョブがあり、問題のジョブが最新でない場合は、実際にはジョブ記述子が必要になります) )。
ジョブ記述子を見つける必要がある場合は、別の端末を使用して、STOP上記の非インタラクティブな方法で信号を送信してください。これにより、ディスプレイが解放され(おそらくEnter数回ヒットするか、実行されるclearかCtrl+ L)、その後、実行jobsしてジョブ記述子を見つけ、その番号のfg %N場所で実行できますN。
CONTCtrl + Zで停止したプロセス(ジョブ/パイプライン)にシグナルを送信すると、たとえそれを実行していなくても、バックグラウンドで再開すると考えていますbg。
プロセスの終了は、いくつかの異なる方法で実行できます。多くの場合、コンソールベースのコマンドからCtrlcキーストローク(デフォルトの割り込み文字)を送信すると、コマンドが終了します。これは、プロセスがフォアグラウンドモードで実行されている場合に機能します。
プロセスがバックグラウンドモードで実行されている場合、まずpsコマンドを使用してジョブIDを取得する必要があります。その後、次のようにkillコマンドを使用してプロセスを強制終了できます。
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated
ここで、killコマンドはfirst_oneプロセスを終了します。プロセスが通常のkillコマンドを無視する場合は、kill -9次のようにプロセスIDを続けて使用できます。
$kill -9 6738
Terminated