
test.shジョブは5分ごとに実行されるようにスケジュールされており、別のジョブtest1.shは午後12時30分@ 12.30に実行するようにスケジュールされています。両方のジョブが実行され、デッドロックに陥ります。したがって、私が使用しているtest.shジョブが実行されていることを確認する必要があります。
ps -ef | grep test1.sh
しかし、これは同じコマンドに対して1行を生成するので、常に正しいようです。
# ps -ef | grep test1.sh
team 24896 607 0 11:55 pts/11 00:00:00 test1.sh
team 24925 523 0 11:55 pts/4 00:00:00 grep test1.sh
grep印刷を避ける方法はtest1.sh
?
私はUnixに初めて触れました。
ありがとう、アン
答え1
ps
出力をパイプするのではなく実行中であることを確認するには、をgrep
使用しますpgrep
。これはプロセスのPIDのみを出力するので、はるかに効率的です。-x
test1.shとフルネームが一致するようにフラグを使用しています。
pgrep -x test1.sh
876
コマンド名を表示するには、この-l
フラグを使用することもできます。
pgrep -xl test1.sh
876 test1.sh
部分一致が必要な場合は削除できます。-x
pgrep -l test
876 test1.sh
877 test2.sh
888 test123.sh
8745 test.bin
答え2
1つずつ従うとgrepを無視できます。
ps -ef | grep test1.sh | grep -v grep
その他:-
ps -ef | grep "[t]est1.sh"
二つ目は下を見下ろして多くの時間を節約します。
答え3
grep
これは、プロセスps
が並列で始まり、ターゲットgrep
文字列が引数として表示されるtest1.sh
ため、プロセスが一致するために発生しますps
。この問題を解決する簡単ですが、おそらく最適ではない方法は次のとおりです。
ps -ef | grep "test1.sh" | grep -v "grep"
2番目のパイプは最初のパイプの出力を取得し、文字列 "grep"に一致する行を除外します。