アプリをgnome-terminalで実行することもありますが、突然gnomeなどを再起動する必要があります。質問への回答も役に立つと思います。何かが起こっているところでSSHから切断したいと思います。
Gnomeのターミナルツリーは次のようになります。
gnome-terminal
bash
some-boring-process
bash
をgnome-terminal
から「切り離す」ことはできますか(またはsome-boring-process
をbashから切り離し、その出力をどこかにリダイレクトできますか)? gnome-terminal
を強制終了した場合、bash
はすべてのサブプロセスを強制終了するために強制終了されます
現在のbashセッションでsome-boring-process
が実行されている場合:
ctrl-z
で停止すると、bashプロンプトが表示されますbg
でバックグラウンドに配置しますjobs
コマンドを使用しますdisown -h %1
で切り離します(そこで実際のジョブ番号を置き換えます)。それは出力をリダイレクトするために何もしません-退屈なプロセスを起動するときそれを考えなければなりません。 [編集]それをリダイレクトする方法があるようです https://Gist.github.com/78226
しかし、真剣に、画面を見てください。何ヶ月も実行されているリモートサーバー上のシェルがあります。
単にバックグラウンドで子プロセスを操作し続けるのではなく、対話を続けたい場合、実際には retty と呼ばれるプログラムがあり、これはプロセスを「盗む」ための概念実証です現在のttyと現在のものに再接続します。
ただし、再接続されたアプリケーションのスタックにアセンブリコードを貼り付けるなど、恐ろしいことをいくつか行います。そして、そのコードはx86_64用に更新されていません。
多分もっと良いアプローチを取る別のプログラムがあり、ユーザースペースのプロセスをファイルにフリーズし、そこから後で(おそらく別のttyで)復元できます。これは cryopid であり、そのプロジェクトまた、概念実証段階で停止したようで、コードが現状では最新のLinuxでは動作しません。まぁ。
これは完全にするためにここにあるべきだと思っただけです。あなたが恐ろしいブードゥー教に頼ることを気にしなければ、これは可能性の領域内にあります-少なくとも理論的な可能性。
(システムの再起動を除いて)何でも終わらせたいものを起動した場合、Nohup
を使用してバックグラウンドで実行します。画面などとは異なり、プロセスに再アタッチすることはできません。ただし、他の場所でのリダイレクトの禁止は、出力がNohup.out
。
プロセスのターミナルを切り替えられるようにしたい場合は、screen
を使用します。自宅や職場からプロセスを開始し、他のプロセスに切り替えるなど。他の端末セッションの出力と同様に、最終的にはバッファーの上部からスクロールされます。
編集:プロセスをすでに起動している場合は、プロセスをdisown
して、プロセスが閉じるときにHUP
シグナルが送信されないようにすることができます。
端末セッションが終了したときに、プロセス(PID)がHUPシグナルを受信しないようにすることができます。次のコマンドを使用します。
Nohup -p PID
このスクリプトは、子プロセスを親から切り離し、それをinitプロセスに割り当てます。
toDetach=$1
./$toDetach & # Runs the process - script on background
disown -h %$(jobs -l | grep $(ps -A | grep $toDetach | cut --delimiter=' ' -f1) | cut --delimiter=' ' -f1 | tr -d '[]+') # and then disowns it from parents process