ps
コマンドは次の 2 つの形式でフラグを取ることができると読みました。
- フラグの前にダッシュを付ける Unix 形式。
- フラグの前にダッシュを付けない BSD 形式。
では、両方の形式で同じフラグを使用できますか。たとえば、次のコマンドは同じ意味になりますか。
ps -x
ps x
それとも、Unix 形式には独自のフラグ セットがあり、BSD 形式にはまったく異なるフラグ セットがあるのでしょうか?
答え1
のマニュアルページあなたの質問に答えます:
ps
異なるタイプのオプションを自由に混在させることができますが、競合が発生する可能性があります。互換性のある多くの標準および実装により、機能的に同一の同義オプションがいくつかありますps
。
ps -aux
は とは異なることに注意してくださいps aux
。POSIX および UNIX 標準では、ps -aux
オプションで選択されるすべてのプロセスだけでなく、"x" という名前のユーザーが所有するすべてのプロセスを で印刷する必要があります-a
。"x" という名前のユーザーが存在しない場合、この ps はコマンドを と解釈しps aux
、警告を印刷することがあります。この動作は、古いスクリプトや習慣の移行を支援することを目的としています。これは脆弱で変更される可能性があるため、依存すべきではありません。
フラグは異なりますが、組み合わせることができます。通常は1つを選択しますが、例えばいずれかps aux
またはps -ef
両方を選択して、すべてのプロセスの詳細を表示します。
唯一のx
フラグは BSD フラグなので、ps x
と はps -x
同じ結果を生成します。ただし、両方のバリアントで定義されたフラグでは機能しません。
これらはすべて、procps
そしてprocps-ng
ps x
との同値性は、ps -x
最初のパスですべての引数を完全に解析できなかった場合に呼び出される「セカンドチャンス」解析段階の結果です。これはマニュアルページには記載されていませんが、HACKING
ソースコード内のファイル:
パーソナリティがBSD解析を強制しない限り、parser.cはBSD+SysV+Gnuの混在した混乱としてコマンドラインを解析しようとします。失敗した場合はBSD解析を試みます。BSD解析が失敗した場合後SysV 解析が試行されましたが、エラー メッセージは元の SysV 解析から取得されます。