あなたはこのように仕事を始めるとしましょう
foo
そして、それをバックグラウンドに置きたいと望みます。Ctrl+ Zと入力するとbgトリックが行われますがfoo、Ctrl+ Zとの間でフリーズしbgます。最初にフリーズせずにfooをバックグラウンドに配置するにはどうすればよいですか?
あなたはこのように仕事を始めるとしましょう
foo
そして、それをバックグラウンドに置きたいと望みます。Ctrl+ Zと入力するとbgトリックが行われますがfoo、Ctrl+ Zとの間でフリーズしbgます。最初にフリーズせずにfooをバックグラウンドに配置するにはどうすればよいですか?
回答:
技術的にはfooすでにバックグラウンドで実行されています。2番目のターミナルセッションを開始できます。最初のセッションは、foo他のことを行っている間も実行を続けます。
Xでは、2番目のターミナルアプリケーションを起動するか、選択したターミナルエミュレータにそのような機能がある場合は別のタブを開くだけです。
コンソールで計画を立てていなかった場合は、別の仮想端末に切り替えて、再度ログインする必要があります。
あなたのようなターミナルマルチプレクサを使用している場合screenか、tmuxあなたはその中に別のセッションを開始することができます。例えば、画面に、これを使用して行われCtrl+ A直ちに続いCtrl+ C。それらを切り替えるには、Ca CnとCa Cpを使用して端末セッション間を行き来します。
foo それ自体(特定の検査がない場合、私が実際に目にするのはまれであり、存在しないと思われる)は、最上位のウィンドウで実行されているかどうか、またはその出力を表示しているものがあるかどうかに関係ありません。
foo既にバックグラウンドで実行されています」から始めましょう...ただ...いいえ、技術的には。
fooので、どうしたらいいですか?」と思いました。質問に答える際に有用ではありませんあなたはこの答え(または他の回答)を感じた場合、私は、議決権を行使することをお勧めしますだけでなく、あなたが正しい角度で何を感じるからの質問に答えるあなた自身の答えを残してではなく、質問に残った答えの1つについて議論します。たとえば、l0b0の答えの方が良いと感じるかもしれませんが、私の答えは、OPが望むことを少なくともおおよそ行う方法を提供します。
アプリケーションをフォアグラウンドからバックグラウンドに送信するには、ターミナルとシェルの両方からの協力が必要です。シェルはフォアグラウンドプロセスグループを設定する必要があるため、ターミナルはそれを単独で行うことはできません。ターミナルはキープレスを処理する必要があるため、シェルはそれを単独で行うことはできません(シェルはフォアグラウンドにないため、キープレスを受け取ることができません)。
私が持っているzshの設定私が押すことができますCtrl+ Z立て続けに二回を。最初のプレスはプロセスを一時停止し、2番目のプレスはバックグラウンドで再開します。bashに移植する方法がわかりません。
キーストロークを注入できるターミナルエミュレーターで実行している場合は、^Zbg^M(^制御文字の表記を使用して)注入できます。たとえば、X11ターミナルエミュレータを使用して実行します。1234はターミナルエミュレータxdotool --window 1234 Ctrl_L+Z b g ReturnのウィンドウIDです。Screenを使用して、screen -S foo -p 12 -X stuff $'\032bg\r'where fooはscreenセッションの名前で、12はウィンドウIDです。
入力がケースに対して十分に速くない場合はkill -s SIGSTOP 1023 && kill -s SIGCONT 1023、1023をターゲットPIDとして、別のシェルから実行します。
免責事項:Ruslanがおそらく知っていたように、そのシーケンスは実際にジョブを再開するので、すぐにbashは気付きません。