ps -Cの動作がCentos 6とCentos 8の間で変更されました。

ps -Cの動作がCentos 6とCentos 8の間で変更されました。

私たちのシステムは、しばしばps -C cmdNameプロセスが実行されていることを確認し、そうでない場合は再起動に使用されます。

Centos 6からCentos 8に移行すると、動作に変化があるように見えましps -Cた。

セントース6(32ビット)

はい、プロセスがあります。

# ps aux | grep DvBuildSegmentList
root     16223  4.0  0.1  16064 11272 pts/0    S    14:14   0:00 ./DvBuildSegmentList
root     16264  0.0  0.0   4416  1880 pts/0    S+   14:14   0:00 grep DvBuildSegmentList

そして、ps -C完全なコマンド名からプロセスを検出します。

# ps -C DvBuildSegmentList
  PID TTY          TIME CMD
16223 pts/0    00:00:00 DvBuildSegmentL

(出力で切り捨てられたコマンドラインに注意してください)

セントース8(64ビット)

はい、プロセスがあります。

# ps aux | grep DvBuildSeg
root     15282  0.9  0.2  99796 42424 pts/1    S    14:18   0:04 ./DvBuildSegmentList
root     16989  0.0  0.0 221900  1104 pts/1    S+   14:26   0:00 grep --color=auto DvBuildSeg

完全なコマンド名を使用する出力はありません。

# /bin/ps -C DvBuildSegmentList
  PID TTY          TIME CMD

ただし、短縮されたコマンド名を使用すると、プロセスが検出されます。

# /bin/ps -C DvBuildSegmentL
  PID TTY          TIME CMD
15282 pts/1    00:00:06 DvBuildSegmentL

32ビットCentos 6と64ビットCentos 8の両方を維持する必要があり、多くのコードを書き換えないことをお勧めします。

  1. psバージョン間で同じ動作を得る方法はありますか? (コマンド名は名前の衝突により最初の15文字まで切り捨てられないことがあります。)

  2. このプロセスを検出する他の方法はありますか? (ps -CC ++、Perl、PHP、およびBashにわたって多くのコードとメソッドが広がっています)

私を編集する

それほど価値のある内容は、切り捨てられた/proc/<pid>/statファイル名を表示します。

cat /proc/4605/stat
4605 (DvBuildSegmentL) S 25769 4605 25769 34817 4605 1077936384 10536 304 0 0 225 119 0 0 20 0 1 0 6717759 103620608 10945 18446744073709551615 4194304 4339868 140734307933616 0 0 0 0 4096 16901 1 0 0 17 4 0 0 0 0 0 6438088 6440229 11730944 140734307937640 140734307937666 140734307937666 140734307938275 0

しかし、/proc/<pid>/cmdline前には完全なパスがありますが、完全なコマンド名があります。

cat -v /proc/4605/cmdline
/usr/local/blah/blah/blah/DvBuildSegmentList^@-d^@2^@

ベストアンサー1

この違いを解決する1つの方法は、procpsパッケージのCentOS 6バージョンを再構築してそこyum swapから始めることですprocps-ng。最も安全な方法ではありませんが、多くのシステムプログラムを以前のバージョンに置き換えます。

procpsしたがって、まったく異なる名前で再構築してインストールしたい場合がありますps。その後、ツールを使用して、インクルードディレクトリがシステムに存在することを確認/opt/el6-rebuilds/bin/psできます。結果はCentOS 8で使用されている「CentOS 6クラス」バージョンになります。PATH/etc/profile.dps

ところで、こう言うと確かにそんな違いがあるのでしょうか?私はRHEL 8でこれを試しましたが、ps -C <program name>正確に指定すると正しく動作します。 (実際に言ったことは逆です。部分文字列で指定した場合にのみ機能します。)

おすすめ記事