ターミナルウィンドウでプロセスを実行してからそのウィンドウを非表示にするにはどうすればよいですか?

ターミナルウィンドウでプロセスを実行してからそのウィンドウを非表示にするにはどうすればよいですか?

python ~/program/proxy.py起動時に端末で実行したいです。その後、このターミナルウィンドウを非表示にします(エージェントだけであるため、デバッグ情報を表示したくないため)。では、どのように機能させることができますか?

答え1

IMHOの最善の解決策は、エージェントをシステムデーモンとして実行することです。

これ小説チュートリアル重要な概念を教える必要があります。残念ながら、これはSuSE中心であるため、他のディストリビューションでは詳細が若干異なる場合があります。これを出発点として使用してください。

PS:問題は少し変です。起動時に開始されたサービスにターミナルウィンドウがありません。ログイン時に実行されるプログラムにはターミナルウィンドウがあります。おそらく自動ログインが有効になっているため、起動プロセスとログインプロセスを混同している可能性があります。

答え2

より粗雑なアプローチは、プログラムをラップし、端末から切り離す簡単なスクリプトを書くことです。それは次のとおりです。

#!/bin/bash

nohup python ~/program/proxy.py > ~/.proxy.log 2>&1 &

その後、ログイン自動起動シーケンスに入れることができます(すでに実行した可能性があります)。

答え3

を使用すると、tmux実際に「隠された」別々のプロセスを開始し、必要に応じて接続してステータスを確認できます。端末で実行すると、その端末セッションを閉じて接続することもできます。tmux Pythonプロセス他の端末で...

この例はwatch実行コマンドとして機能しますが、Pythonコマンドを置き換えると、切り離された状態でtmuxセッションが開始されます。

tmux new -d 'watch -n 1 -d date'

「非表示」(分離された)セッションの現在の状態を表示するには、tmux attachターミナルウィンドウに次のように入力します。

使用することもできますが、このコメントによると、screenより良いオプションになると思います。tmuxUnixとLinuxの答え...

答え4

起動時にどれだけ早く実行したいかによって、cron @rebootを使用できます。

(環境変数を使用する必要があります。)

その後、個々の端末にラップされます。

tmux new -d '/path/to/python /full/path/program/proxy.py'
# or #
screen -d -m '/path/to/python /full/path/program/proxy.py'

実際、これらはすべてコンポジション端末の背景に合わせて設定されています。

これは通常、「sinatra」や「minecraft」などの「ミッキーマウス」サーバープロセスまたはヘッドレス「fold at home」に使用されます。

きれい/制御のためにシェルスクリプトを使用して起動して呼び出すことができます。それクローンから。

関連情報