10

Ctrl + Zなどの一部のキーが機能しなくなったため、この質問は特別です。

次の順序で入力して、プロセスをバックグラウンドにしようとしました。

  1. 探す /
  2. CTRL + Z
  3. bg

しかし、私はまだstdoutを見ることができます。最初のステップのみを実行することとの唯一の違いは、コマンドCTRL+Zが機能しなくなることです。保存されていないジョブがあり、ハードドライブが100GBを超えている場合は、かなり厄介です。それで

プロセスをバックグラウンドにするにはどうすればよいですか?

[詳細]

MacでBashの4番目のバージョンを使用しています。

[ニコラス・ライリーによる核心の返事]

問題は、実行中のプロセスのバックグラウンドの「影響」を理解していないことです。CTRL+Zなどのコマンドがバックグラウンドプロセスで機能しない理由がわかりません。次のコマンドを使用して、別のシェルでプロセスを強制終了することができました。

ps -ej | awk '! /grep/ && /find/ {print $2}' | xargs kill -9
4

8 に答える 8

12

^Z最前線のジョブがシェルになり、シェルは通常 に応答しないため、 は機能していませんSIGTSTP。(本当に非ログイン シェルを中断したい場合は、suspend通常は動作します。)

問題は、バックグラウンドにあるジョブの影響を誤解しているようです。ジョブの標準出力のリダイレクトは関係ありません。

実際、あなたがをしたいのかは不明です。find実行を停止したいだけの場合は、 orfgを使用します (デフォルトではand をそれぞれ送信します)。^C^\SIGINTSIGQUIT

実行を続けたいfindが、それ以上の出力を抑制したい場合、私が考えることができる最も簡単な解決策は、を使用することbg ; disown ; exitです。これにより、シェルがその子プロセス ( find) を強制終了するのを停止し、シェルを終了します。ターミナル ウィンドウの最上位にあると仮定すると、もう少し多くの出力が表示されfind、実行が継続されます (ただし、それを操作する方法はありません)。

于 2009-04-28T03:23:36.373 に答える
6

私はdisownを使用します。

find / & disown
exit # close the terminal and the command still runs

^Z の後に disown を使用することもできます。

find /
^Z
bg
disown
exit

disown は bash に組み込まれていると思います。他のシェルの代替品についてはわかりません。

詳細については、 Server Fault に関する私の同等の回答を参照してください。

于 2009-04-28T03:58:59.737 に答える
5

UNIXライクなシステムでは、sttyを使用して操作を別のキーに設定できます。

$ stty susp Q

CTRL-Zの代わりにQをサスペンドキーにします。

于 2009-04-28T03:12:33.903 に答える
5

プロセスをバックグラウンド化しても端末デバイスからの出力は切断されません。そのため、まだ出力が表示されており、出力には TTY 設定を詰め込む可能性のある制御文字が含まれている可能性があります (catバイナリ ファイルを使用するのが良い方法です)。

ジョブをバックグラウンドで実行する場合は、正しく実行してください。

find / >/tmp/out 2>&1 &

/tmp/out終了したらファイルを調べます。

于 2009-04-28T03:25:31.110 に答える
2

私は通常、この種のことを nohup で行います。このような:

nohup find / > /tmp/myresults.txt &

nohup は、コンソールが消えても (ウィンドウを閉じたり、SSH を失ったりなど)、プロセスが停止しないようにします。">" は出力をコンソールではなくファイルに送信し、"&" はジョブをバックグラウンドに置きます。

于 2009-04-28T03:25:20.380 に答える
0

Ubuntu 9.04 では、 & の後にプロセスを開始して、バックグラウンドで実行できることを知っています。たとえば、「sudo gedit /boot/grub/menu.lst &」は、バックグラウンドで GRUB 構成ファイルを編集するテキスト エディターを起動します。

于 2009-04-28T03:39:30.237 に答える
0

Linux または UNIX の一般的なバリアントと、おそらく bash シェルを使用していると仮定します。その場合:

CTRL-Z は、SIGTSTP信号をフォアグラウンド プロセスに送信します。を指定することで、 kill コマンドでも同じことができるはずですkill -s SIGTSTP [pid]

于 2009-04-28T03:16:33.677 に答える
0

kill -STOP your_pid_here

別のコンソール ウィンドウから?

http://tombuntu.com/index.php/2007/11/23/how-to-pause-a-linux-process/#comment-132413

于 2011-02-23T22:26:25.510 に答える