web-dev-qa-db-ja.com

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

実行したいpython ~/program/proxy.py起動時にターミナルで。次に、このターミナルウィンドウを非表示にします(これは単なるプロキシプログラムであり、デバッグ情報を表示したくないためです)。では、どうすればそれを機能させることができますか?

3
ufo22940268

私見、最適な解決策は、そのプロキシをシステムデーモンとして実行することです。

これ 小説からのチュートリアル はあなたにコアコンセプトを教えるはずです。残念ながら、これは少しSuSE中心であり、他のディストリビューションでは詳細がわずかに異なる可能性があります。出発点として使用してください。

P.S.あなたの質問には奇妙なことがあります。起動時に開始されたサービスにはターミナルウィンドウがありません。ログオン時に起動するプログラムは、ターミナルウィンドウを持つことができます。おそらく、自動ログイン機能が有効になっているため、起動プロセスとログインプロセスが混同されています。

5
andcoz

より大まかなアプローチは、プログラムをラップしてターミナルから切り離す単純なスクリプトを作成することです。何かのようなもの:

#!/bin/bash

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

次に、それをログインの自動起動シーケンスに入れることができます(おそらくすでに行っているように)。

4
andcoz

tmuxを使用すると、事実上「非表示」になっている分離プロセスを開始し、必要に応じてそのステータスを確認するためにアタッチできます。ターミナルから起動する場合は、そのターミナルセッションを閉じて、その後tmux python process別の端末から.。

この例では、実行するコマンドとしてwatchを使用していますが、pythonコマンド...を置き換えてください...すでにdeteched状態でtmuxセッションを開始します。

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

「非表示」(デタッチ)セッションの現在の状態を表示するには、ターミナルウィンドウにtmux attachと入力するだけです。

screenを使用することもできますが、このコメントに基づくと、tmuxの方が適していると思います nix-&-Linuxの回答 ...

4
Peter.O

質問に対するliteralの回答を提供するには、 AllTray *などのプログラムを使用できます。次に、コマンドを渡して端末を起動し、その端末にコマンドを渡してプログラムを実行します。 AllTrayに端末を非表示にするように指示すると、端末はシステムトレイに埋め込まれ、出力を表示する必要がある場合にプルアップできるようになります。

ただしandcozの答え を使用して、このプログラムをシステムデーモンとして実行することをお勧めします。出力をログファイルに移動します。動作しない唯一の方法は、それがインタラクティブプログラムである場合ですが、その音からすると、インタラクティブプログラムについて話しているわけではありません。

*免責事項:私はAllTrayのメンテナーです

1
Michael Trausch

起動のどのくらい早い段階でこれを実行するかに応じて、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'

事実上、これらは合成端末の背景になっています。

これは通常、「シナトラ」や「マインクラフト」などの「ミッキーマウス」サーバープロセス、またはヘッドレスの「自宅での折りたたみ」に対して行われます。

きちんとした/制御のために、シェルスクリプトを使用して起動を終了し、cronからthatを呼び出すことができます。

0
mckenzm