どのようにコマンドをバックグラウンドで設定し、ターミナルを閉じてfgに戻しますか?


10

コマンドをバックグラウンドで実行し、後でそれをフォアグラウンドにする方法を見つけようとしています。私はチュートリアルと答えにうんざりしていて、簡単だと人々が言っ​​ているので&、コマンドの最後に追加するだけで、バックグラウンドで実行できます。1つのターミナルウィンドウ内でのみ機能します。コマンドを1つのターミナルのバックグラウンドに配置し、ターミナルを再度開いた後にフォアグラウンドに戻したい

例:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

もちろん、ターミナルを閉じた後、1つのジョブは見つかりません。

次の例:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

私は何を間違えましたか?コマンドをバックグラウンドで実行してフォアグラウンドに戻す方法を誰かに説明してもらえますか?

回答:


11

それはあなたが望む方法では不可能です。

基本的な概念をいくつか見てみましょう。

  • プロセスグループは、すべてのシグナルを同時に送信できる関連プロセスの集まりです。
  • セッションは、単一の端末デバイス(制御端末と呼ばれる)に接続されているか、どの端末にも接続されていないプロセスグループの集合です。

端末を閉じた場合、セッション内のすべてのプロセスは、initプロセスに親が変更されたもの(デーモン)を除いて停止しています。そして、彼らに再び制御端末を与える方法はありません。

つまり、POSIXシステムではプロセスの親の変更は非常に制限されており(デーモン化は例外です)、要件を満たせません。


6
技術的にはこれが正解ですが、この問題を抱えている訪問者は、screen / byobu / tmuxに関する他の回答で「その解決策」を見つけると思います。
Programster

あなたは正しいです。しかし、私の観点からは、システムがよりよく機能し、あなたが何を望んでいて何が間違っているかを理解するためには、基本的な概念がより重要です。あなたがた両方に感謝します!
Timur Fayzrakhmanov 2014年

16
  1. インストールscreen

    sudo apt-get install screen
  2. 開始screen

    screen -S session_name
  3. 必要なコマンドを実行します。

  4. screenターミナルからデタッチします(コマンドは引き続き実行されます):

    CTRL+ a+を押すd

  5. ターミナルを閉じる

  6. 別のターミナルを開き、最後のscreenセッションを再接続します。

    screen -r

詳細とscreenlook inの追加オプションについてman screen


2
画面またはbyobu(特にubuntuを実行している場合)。屏風は、正しければ画面に基づいていますが、私には便利で使いやすい追加機能があることがわかりましたが、それは意見の問題です。
Programster

良い提案ありがとうございます!多分それは機能で必要になるでしょう!)愛を込めてロシアから<3
Timur Fayzrakhmanov

@Programster、そう、Byobuは元です。画面。byobu-screenとbyobu-tmuxの両方があります。
user.dz 2014年

1
tmux代替としてお勧めしscreenます。
gerrit 2014年

5

試したことがありますbyobuか、またはtmuxターミナルマルチプレクサです。探しているものとは異なりますが、動作は似ています。

byobu-screen

次に、コマンドを実行してデタッチします。

byobu-screen -d

再開します:

byobu-screen -r

https://help.ubuntu.com/community/Screenを参照してください


それらのものも、+ 1。
鷹匠14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.