回答:
通常、ターミナルウィンドウに次のように入力します。 Control + Zをてプロセスを「中断」し、bg
コマンドを使用して「バックグラウンド」にします。
例:スリープコマンド
$ /bin/sleep 1000
^Z[1] + Stopped /bin/sleep 1000
$ bg
[1] /bin/sleep 1000&
$ jobs
[1] + Running /bin/sleep 1000
$
プロセスが実行されており、コマンドラインがまだあることがわかります。
fg
コマンドを使用してプロセスをフォアグラウンドに戻すことができます。このコマンドは、ジョブID(1
この場合は括弧で指定)をパラメーターとして受け取ります。の使用に固有のものではなく、でbg
起動されたプロセスで実行できます&
。
Ctrl+ Zはそれを行う方法ですが、完全を期すために:「コマンド」を尋ねる質問は、(別の端末から)次のようになります。
kill -STOP pid_of_the_running_applications
そしてもちろん
bg
アプリケーション端末から。
Bashの場合:
Ctrl+Zその後bg
。
実行jobs
して結果を確認します。
/bin/sh
ため、これは機能しませんでした:
CTRL- を押さzなければならないという不便さの予防策として、エディターをバックグラウンドで実行するエディターのラッパースクリプトを作成できます。これにより、明示的にバックグラウンドで開始することを覚えておく必要がなくなります。
#!/bin/sh
EDITOR="emacs" # or whatever
if [ -z "${DISPLAY}" ]; then
${EDITOR} "$@"
else
${EDITOR} "$@" &
fi
上記では、まずXサーバーが利用可能かどうかを判断してから、バックグラウンドでのみエディターを実行します(そうでない場合、多くのUnixエディターは代わりにターミナルを使用し、この場合はエディターをバックグラウンドプロセスとして実行したくない) 。"$@"
ラッパースクリプトに指定したのと同じように、選択したエディターにすべての引数を逐語的に渡します()。
欠落しているコマンドについては...私の基本的な実験によれば、ターミナルを使用しないGUIプログラムの場合、最初に送信SIGSTOP
してSIGCONT
からフォアグラウンドプロセスに送信するのと同じくらい簡単kill
です(シェルスクリプトを使用してこれを実装する場合はコマンドを使用) 。もちろん、別のターミナルウィンドウ/タブで実行する必要がありますが、信号を送信するPIDを簡単かつ一般的な方法で見つけるのは困難です。デフォルトでは、2つのシグナルを指定された名前のすべてのプロセスに送信できます(デフォルトでお気に入りのエディターに設定し、PIDを引数として使用することもできます)。
#!/bin/sh
EDITOR=emacs # whatever
stop_cont_prog()
{
case "$1" in
# begin with number is considered PID - this is not good
# enough to be taken seriously...
[1-9]*) kill -SIGSTOP "$1"; kill -SIGCONT "$2";;
*) killall -SIGSTOP "$1"; killall -SIGCONT "$2";;
esac
}
if [ -n "$1" ]; then
for prog in "$@"; do stop_cont_prog "$1"; done
else
stop_cont_prog "${EDITOR}"
fi
この方法では、実行後にターミナルタブが正しく表示されました(数回) emacs
では、バックグラウンドでコマンドを。ただし、シェルジョブ制御またはターミナル設定の混乱により、ターミナルで実行されているemacsプロセスは適切に復元されませんでした。したがって、この方法は、いくつかの洗練された方法から恩恵を受けるでしょう。
SIGSTOP
あなたは(一般的なデフォルトで)押しフォアグラウンド・プロセスに送信されたまさにですCTRL- z。stty -a
出力を参照
$ stty -a
speed 38400 baud; rows 50; columns 200; line = 0;
intr = ^C; [...] start = ^Q; stop = ^S; susp = ^Z; [...]
[...]
(出力省略)およびstty
マニュアルページ:
susp CHAR
CHAR will send a terminal stop signal
SIGSTOP
シグナルを使用して停止したプロセスは、を送信することで再開できますSIGCONT
。通常、シェルジョブ制御ロジックは、無視するコマンドにSIGCONT
関連する他の必要な操作fg
とbg
コマンドを送信し、処理します。
tmux
あなたの質問で望まれるのと同じ機能を提供します。