シェルのバックグラウンドでプログラムを実行するには、プログラムを実行したままシェルを閉じることができますか? UIに問題があるか、何らかの理由で、ターミナルウィンドウからプログラムを起動する必要があるとしましょう。たとえば、nm-applet
:
nm-applet
開始されると、ターミナルウィンドウの前景を占有します。
ターミナルを開いたままにしたり、ターミナル全体を占有したりすることなく、プログラムをバックグラウンドで実行する簡単な方法はありますか?
そのメモでは、アンパサンド(&
)をコマンド自体に追加することで、端末からプログラムを実行し、他の入力を許可する方法を見つけました。
nm-applet &
しかし、端末が閉じられると、端末で開始されたプロセスは強制終了されるため、これはあまり役に立ちません。
最近setsid
が好きになりました。ターミナルから何かを実行しているように見えますが、切断して(ターミナルを閉じて)そのまま続行できます。
これは、コマンドが実際に分岐し、入力が現在の端末に到達する間、完全に異なる親(端末を閉じた後も存続する)によって所有されているためです。
例:
setsid gnome-calculator
また、現在のツリーからプロセスを分離するために使用できるdisown
にもかなりこだわります。バックグラウンドアンパサンドと組み合わせて使用します。
gnome-calculator & disown
また、かっこ付きのサブシェルの生成についても学びました。この簡単な方法は機能します。
(gnome-calculator &)
そしてもちろん、あなたが言ったようにNohup
があります。 Nohup
については、私に尋ねずに~/Nohup.out
に書き込む傾向があるので、私はワイルドではありません。あなたがそれに頼るなら、それはあなたのためかもしれません。
Nohup gnome-calculator
また、長期のプロセスには、screen
や、接続間でセッションを維持する他の仮想端末マルチプレクサなどがあります。端末出力への一時的なアクセスが必要なだけなので、これらはおそらく実際には当てはまりませんが、後戻りして表示したい場合最新の端末アクティビティ、画面がおそらく最良の選択です。
インターネットにはscreen
チュートリアルがたくさんありますが、簡単なクイックスタートを次に示します。
ここに私が行く2つの方法があります。まず、端末から実行しないでください。ヒット Alt+F2 実行ダイアログを開き、そこから実行します(&なし)。
ターミナルから、実行します
nm-applet &
ただし、自分で端末を閉じないでください。つまり、閉じるためにXボタンを押したり、メニューバーから[ファイル]-> [終了]を使用したりしないでください。ターミナルをそのように閉じると、内部で実行されているbashにHUP(ハングアップ)シグナルが送信され、その子がすべての子にHUPシグナルを送信します(この場合、Nohupは機能します)。
代わりに、exit
を実行するか、キーを押してシェルを終了します Ctrl+D。 bashはその子を無視し、終了して、バックグラウンドプロセスを実行したままにします。また、bashが終了すると、端末は子プロセスを失ったため、端末も閉じます。
一度にすべてを行う:
nm-applet & exit
あなたが指摘したように、あなたは実行することができます
Nohup nm-applet &
端末を閉じるときに終了信号を無視します。問題ありません。
他の多くの答えが欠けていることの1つは、現在シェルをブロックしている実行中のプロセスを切り離す方法です。ほとんどの端末とシェルでは、 Ctrl+Z 実行中のプロセスを停止し、入力プロンプトに戻ります。次に、発行できます
bg
実行中のプロセスをバックグラウンドに送信します。問題
fg
代わりに、実行中のプロセスをフォアグラウンドに戻します。
編集: この回答 で詳細を確認しました。後で発見しました。
(exec PROGRAM &> /dev/null & )
を使用して、サブシェルのPIDがPROGRAM
に引き継がれるようにします。私はこのアプローチを複数の異なるプログラムで何度もテストしました。元の端末を閉じても、新しく生成されたプログラムには影響しません。
小さなデモ:
$ # this is before running
$ (exec firefox &> /dev/null &)
$ # and look, we still in side the terminal and can continue working
By風ターミナルをお勧めできます。 F6キーを押すと、プロセスを簡単にデタッチできます。
上記には良い答えがありますが、バックグラウンドでのMATLABの使用方法について2セントをお伝えしたいと思います。
Sudo -b matlab
Sudoの-b
タグは、アプリケーションをバックグラウンドで実行できます。このコマンドを実行した後、ターミナルを閉じることもできます。
おそらく、無関係ですが、シェルコマンドの説明に使用できるすばらしいWebサイトがあります。 http://explainshell.com/explain/8/Sudo
KDEを使用する場合は、kstart
を使用することもできます。これにより、ターミナルから切り離されたプログラムが開始されます。また、KDE環境がコマンドに対して正しくセットアップされていることを確認します。 (参照用の kstart.cpp
ソースコードを参照 。そこからわかるように、KProcess::startDetached
を使用し、KProcess
は QProcess
から派生し、startDetached
が開始します新しいプロセス、およびそれからデタッチします。)
kde-open
またはxdg-open
またはgnome-open
も同様です。
私はその正しい方法を知りませんが、前のセッションをすべて残して、別のセッションを開始します。たとえば、ラズベリーで簡単なWebサーバーを実行しました。 web.pyのもの。次に、新しいセッションを開始しますが、それはそのままにします。それでおしまい。また、他のセッションで作業している場合でも更新されるため、便利です。