ps
私はLinuxのコマンドについてより深く理解しようとしています。
ps axjf
を使用した場合、ps -axjf
マニュアルでは異なる意味を持っているように見えますが、出力はほぼ同じであることを発見したときに混乱しました。
それらの具体的な違いは何ですか?
これらのオプションについては、マニュアルには次のように記載されています。
a Lift the BSD-style "only yourself" restriction, which is imposed upon the set of all processes when some BSD-style (without "-") options are used or when the ps personality setting is BSD-like. The set of processes selected in this manner is in addition to the set of processes selected by other means. An alternate description is that this option causes ps to list all processes with a terminal (tty), or to list all processes when used together with the x option.
-a Select all processes except both session leaders (see getsid(2)) and processes not associated with a terminal.
x Lift the BSD-style "must have a tty" restriction, which is imposed upon the set of all processes when some BSD-style (without "-") options are used or when the ps personality setting is BSD-like. The set of processes selected in this manner is in addition to the set of processes selected by other means. An alternate description is that this option causes ps to list all processes owned by you (same EUID as ps), or to list all processes when used together with the a option.
j BSD job control format.
-j Jobs format.
f ASCII art process hierarchy (forest).
-f Do full-format listing. This option can be combined with many other UNIX-style options to add additional columns. It also causes the command arguments to be printed. When used with -L, the NLWP (number of threads) and LWP (thread ID) columns will be added. See the c option, the format keyword args, and the format keyword comm.
特にf
andオプションは階層関係を出力するのに何の意味もないよう-f
です。-f
2つのコマンドの出力を比較しましたが、数行を除いてほぼ同じです。
lightxy233@iZ8vb0rgcfh3yx60rzee1jZ:~$ ls
_axjf.txt axjf.txt
lightxy233@iZ8vb0rgcfh3yx60rzee1jZ:~$ diff _axjf.txt axjf.txt
81c81
< 2 639305 0 0 ? -1 I 0 0:00 \_ [kworker/u4:0-flush-252:0]
---
> 2 639305 0 0 ? -1 I 0 0:00 \_ [kworker/u4:0-events_unbound]
126,127c126,127
< 630827 630830 630830 630830 pts/0 641497 Ss 1000 0:00 | \_ -bash
< 630830 641497 641497 630830 pts/0 641497 R+ 1000 0:00 | | \_ ps axjf
---
> 630827 630830 630830 630830 pts/0 641448 Ss 1000 0:00 | \_ -bash
> 630830 641448 641448 630830 pts/0 641448 R+ 1000 0:00 | | \_ ps -axjf
129c129
< 630845 641496 630845 630845 ? -1 S 1000 0:00 | \_ sleep 1
---
> 630845 641447 630845 630845 ? -1 S 1000 0:00 | \_ sleep 1
私はこれがさまざまなスタイルのpsコマンドを混在させることを含むと思いますが、まだ良い説明が見つかりませんでした。
答え1
使用していると仮定procps-ngのps
ps
実際には、さまざまなスタイルを混在させ、オプションを解釈する方法が重要です。コマンドの重要な要素は、x
オプションを使用することです。オプションはBSDスタイルでのみ存在し、コマンドで明示的であるため(-a
引数がないため)、オプションセット全体はBSDスタイルとして解釈されます。その結果、同じオプションセットがアクティブになり、プロセスの違いによって出力の違いが発生しますaxjf
。-axjf
を削除すると、とのx
違いを見ることができます。ps ajf
ps -ajf
x
マニュアルページに表示されるあいまいさはps
オプションの使用に関連しています-u
。 Unixスタイルとして解釈される場合、ユーザーを指定するには引数が必要です。したがって-ux
(およびそのバリエーション、たとえば)はユーザーがいない-aux
と解釈されます。この場合、procps-ngはBSDスタイルに切り替える経験的な方法を適用します。-u x
x
ps