
watch "ps aux | grep myShittyProcess"
これをtmux セッションで実行しようとしています 。このプロセスmyShittyProcess
も tmux セッションで開始されました。watchps aux
コマンドなしで動作します。しかし、watch に入れるとすぐに実行に失敗します。これを動作させるにはどうすればよいですか?
- 編集 -
ps
tmux をフルスクリーンにサイズ変更すると動作することがわかりました。出力のラッピングに関係するもので、grep
ラッピングされたコンテキスト内で見つけることができません。
答え1
質問の編集で述べたように、xzfcの回答の場合、問題は tmux の行折り返しに関連しているようです。 のドロップイン代替品に近いものについてはps aux | grep [q]uote
、ユーザー情報が必要ない場合は、次を試してください。
$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote
$ watch pgrep -af [q]uote
この-a
フラグにより、出力にコマンド ライン引数が含まれるようになり、-f
コマンド ライン引数だけでなくプロセス名も検索できるようになります。
答え2
走る
watch "COLUMNS= ps aux | grep TheProcessYouWatch"
説明: は、watch
特定の追加の env 変数、つまりCOLUMNS
と を設定します。これは、 と をLINES
比較することで簡単に確認できます。env | grep COLUMNS
watch 'env | grep COLUMNS'
が設定されている場合COLUMNS
、ps
出力がgrep
(または他の何か) にパイプされている場合でも、出力は 1 行にその文字数で切り捨てられます。 ( ps
、なぜ私にこんなことをするのですか?)。のコマンドCOLUMNS
内を空に強制するだけで、は OP (および私) が期待したとおりに動作します。watch
ps
ちなみに、プロセスが監視対象出力の一部にならないようにするには、次のように追加することを検討してwatch
ください。grep
[]
watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"
(もちろん、慣れておくことpgrep
もお勧めします。他の回答もこれに役立ちます。)
答え3
ps
は人間が読める出力を生成するユーティリティであり、人間が読めるテキストを grep で検索するのは得策ではありません。pgrep myShittyProcess
の代わりにを使用する必要がありますps aux | grep myShittyProcess
。はpgrep
pid の単純なリストを生成します。より退屈でない出力が欲しければ、pgrep
の出力を に渡すことができますps
:
ps -opid,user,args -p `pgrep myShittyProcess`
このワンライナーを使用する場合は、早期のシェルコマンド置換を防ぐために(not )watch
で囲む必要があります。' '
" "
watch 'ps -opid,user,args -p `pgrep myShittyProcess`'