tmux
サーバーにインストールして実行していますjupyter
。ニューラルネットワークを合わせるには時間がかかりますが、サーバーが公開されているためリソースが不足しています。私のプログラムを実行し、実行するのにかかる時間をおおよその予測し、予想される実行時間を秒単位で使用tmux kill --time 5000
して同様のコマンドを作成できるかどうか疑問に思いました。5000
これにより、未使用のリソースを借りることができなくなります。
答え1
私はこれを直接見つけました。
プロセスを終了するには、sleep
次のコマンドを使用できます。
sleep <time in seconds> && tmux kill-session -t <session name>
または、すべてのセッションを終了する必要がある場合は、tmux
単に次のように入力できます。
sleep <time in seconds> && pkill tmux
UPD:またはコメントで推奨されているように、次のものを使用できます。
timeout <time> tmux <command>
答え2
kill
サーバーは、tmux
tmux 内で実行するプロセスを必ずしも停止するわけではありません。しかし、tmux
その中から始まったすべてのプログラムがもう存在しない場合は、そのプログラムを終了したいようです。
デフォルトでは、tmuxサーバーはそのウィンドウに割り当てられているすべてのプロセスが終了すると終了します。これを使用してremain-on-exit
ウィンドウを開いたままにしてシャットダウンプロセスの結果を確認できますが、再接続して確認せずにサーバーをシャットダウンしたいようですremain-on-exit
。セッションなしでオンになっていますが、あなたはそれを望んでいません。基本的な動作はまさにあなたが望むようです。あなたがすべきことは、ウィンドウに割り当てられたプロセスが終了することを確認することだけです。exit-empty
off
tmux new-session command1
これにより、command1
新しく作成されたセッションの単一ウィンドウ内の単一ウィンドウにプロセスが割り当てられます。それからtmux new-window command2
待ってくださいtmux split-window command3
。 tmuxサーバーはcommand1
、、、、command2
(および他の場合)終了後に終了し、command3
他のセッションはありません。
対話型シェルを使用してセッション/ウィンドウ/ウィンドウを作成する場合、シェルは重要なプロセスです。command4
シェルで起動されたプログラムは終了できますが、シェルとtmuxサーバーはそのまま残ります。インタラクティブシェルでtmuxのプログラムを実行するのに慣れていて、この方法を維持したい場合は、不要なときにtmuxがすぐにシャットダウンされるようにするには、各シェルが操作が完了するとすぐに各シェルが終了することを確認する必要があります。終了します。 tmux内のシェルでは、次のことができます。
command4; exit
でも
command4; command5 && command6 | (command7; command8) | command9; exit
これにより、コマンドが終了するとすぐにシェルが終了します。command4
電話できる唯一の簡単な場合
exec command4
シェルをに置き換えますcommand4
。これからtmuxサーバーにとって重要なのはcommand4
これだけです。
どのようにして、すべてのセッションのすべてのウィンドウ内のすべてのウィンドウが最終的に終了することを確認してください。これを正しく実行すると、tmuxサーバーがすべてシャットダウンされ、自動的にシャットダウンされます。
この方法では、何も推定する必要はありません。 tmuxサーバーは必要なだけ実行され、早期にシャットダウンする危険はありません。
繰り返しますが、これはすべて、そのtmuxの端末(ウィンドウ)のすべての出力が消費可能であると仮定します。私はあなたの答えで何も確認せずにセッションまたはtmuxサーバーを終了したいと思いました。
私のソリューションを使用すると、古いタイマーが新しい状況に適していないことを心配することなく、必要に応じて新しいセッション、ウィンドウ、またはペインを作成できます。もはや必要ない場合は、すべてのウィンドウが消えます。すべてのウィンドウ、すべてのセッション、およびtmuxサーバー全体で同じです。
ウィンドウに割り当てられたコマンドの一部が無期限に実行されるようになっている場合(つまり、要求が終了するまで)、このソリューションは実際には機能しません。私はそのようなコマンドに問題がないと思います。しかし、そうであれば、次のようなcommand4
こともあることに注意してくださいtimeout 5000 actual_command4
。