- 私のホストで3つのJavaプロセスが実行されています。 SSHクライアントを介してホストにアクセスします。プロセスの1つがハングして再起動するには、pidプロセスを終了する必要があります。
- ファイル名はわかりますが、ファイル番号はわかりません。
- プロセスは画面内で実行中です。画面に参加すると、Javaプロセスが開いて実行されているため、コマンドを介して停止または
ctrl+c
停止することはできません。私が見るユニークな解決策はそれを殺すことです。
[root@vmi1478348 ~]# screen -ls
There are screens on:
18043.lob (Detached)
10196.fac (Detached)
10100.hu3 (Detached)
9868.bung (Detached)
この pid 番号はプロセス pid 番号とは異なり、画面 pid 番号にすることができます。したがって、終了すると、終了しようとするJavaプロセスは終了せず、画面は終了します。
コマンドを使用すると
ps aux
pidを確認できますが、javaファイル名がjavaプロセス行の末尾にあり、図のようにsshクライアントコンソール画面には出ません。フォントサイズを縮小しようとしましたが、問題が残っています。行の残りの部分は表示されません。メモ帳からコピーする行をマウスで選択しようとしましたが、まだ切り捨てられます。解決策はありますか?
ベストアンサー1
必要なものは次のとおりですpgrep
。
pgrep -fa 'file\.jar'
-f
:pgrep
ファイル名を含む完全呼び出しコマンドラインに対して拡張正規表現を強制的に一致させます。-a
:pgrep
フルコールコマンドライン(ファイル名を含む)を強制的に出力し、端末の幅を超えて自動的に行を折ります。
これにより、式に一致するプロセスIDのリストと完全な呼び出しコマンドラインが表示され、必要に応じて各項目が複数行に折りたたまれます。
kill
この時点で正しいものを選択するか、代わりにpid
同じ正規表現を渡すことができます。 (2番目の方法を使用している場合は、ターゲットプロセスが生成されたリストにのみ表示されることを確認してください。これにより、一致するプロセスがシグナルを生成します。)pkill -f
pgrep -fa
pgrep -fa 'file\.jar'
file\.jar
他の方法:可能であれば、htop
矢印キーを使用して右にスクロールできます。
screen
もう1つの可能な方法:プロセスに正しく信号を送信すると、電波が強制され、最終的にサブプロセスが終了することが保証されます。おそらくこれを調べて、もう一度報告します。私はこのトピックについて少し錆びました。
1技術的には、少なくともLinuxベースのシステムの現在のバージョンのprocps実装では、これはプロセスpgrep
(またはその祖先)によって実行された最後のシステムコールに渡された引数スペースといくつかのエスケープ文字を関連付けたものです。 128KiBはprocps'によって報告されたものと同じpidですexecve()
。ps -wwo args=