私は(cshではなく)tcshを使用し、pgrep csh | xargs ps -p
なぜcshを実行しているのかを調べるために実行しました。いくつかの結果:
1529 pts/0 Ss 0:00 -csh
1764 pts/3 Ss 0:00 -tcsh
1979 pts/4 Ss+ 0:00 -bin/tcsh
それから私はps -p 1529 1764 1979
同じ結果を得ました。
PID TTY STAT TIME COMMAND
1529 pts/0 Ss 0:00 -csh
1764 pts/3 Ss 0:00 -tcsh
1979 pts/4 Ss+ 0:00 -bin/tcsh
それから私はそうでした。ps -p 1529; ps -p 1764; ps -p 1979
PID TTY TIME CMD
1529 pts/0 00:00:00 tcsh
PID TTY TIME CMD
1764 pts/3 00:00:00 tcsh
PID TTY TIME CMD
1979 pts/4 00:00:00 tcsh
ps --version
与えてprocps-ng version 3.3.10
生産tcsh --version
してくださいtcsh 6.19.00 (Astron) 2015-05-21 (x86_64-unknown-linux) options wide,nls,dl,al,kan,sm,rh,color,filec
。
なぜこんなに奇妙な行動をするのでしょうか?プロセスモニタを作成しようとしていますが、tcshに3つの異なる形式を取るのは面倒です。
答え1
2つの異なる分野を比較しています。
タイトル行に注意してください。 dashがあるものとCOMMAND
tcshがあるものがありますCMD
。より標準書式指定子部分man 1 ps
マンページ。
基本的に:
cmd
(CMD
)はパラメータがすべて文字列のコマンドです。comm
(COMMAND
)は、プロセスが実行されている実行可能ファイルの名前です。
Linuxでは、後者を個々のスレッドprctl(PR_SET_NAME, string)
だけでなくプロセス全体に設定することもできます。しかし、制限は16文字です。pthread_setname_np(thread, string)
string
シェルは通常、プロセスリストが論理的に正しく表示されるように、実行時にシンボリックリンクまたはパターンに基づいて名前を設定します。特に、ダッシュで始まる名前(例-tcsh
:)は、次のことを示すために使用されます。ログインシェル。
OPの例にはシェルバイナリを実行する3つのシェルがありtcsh
、その3つすべては次のとおりです。ログインシェル、そのうちの1つがcsh
モードにあります。
ㅏログインシェル特定の対話型モードのシェルです。シェルは、スクリプトを実行するシェルとは若干異なる動作をします。スクリプトには必要ありませんが、人がシェルを使いやすくするためのアドオンを含むモードだと思います。
OPはほぼ確実にcsh
エイリアスを使用し、3つのシェルはtcsh
それぞれおよびで始まりました。コマンドで実行された実際のバイナリを見つけるには。tcsh -l
csh -l
bin/tcsh -l
realpath $(which command)
答え2
これはLinuxコマンドにとって奇妙なことですps
。ps
渡したオプションに基づいてバリアントを推測して、複数のUnixバリアントの動作をエミュレートしようとします。本ではこれを「性格」と表現する。マニュアルページ。
推測されるバリエーションによって、デフォルトの出力フィールドセットが異なります。 Linux属性では、(「PID」)、(「TTY」)、(「TIME」)、および(「CMD」)列がps
表示されます。 BSD属性で「PID」、「TTY」、time comm ps -p 1529 ps -p 1529 1764 1979 -p 1529 1764 1979 ps -p ps ps 1529`を表示します。pid
tty
time
args
ps
pid
tty
stat “STAT”,
“TIME” and
“COMMAND”.
is (historically) System V syntax, and in that case Linux chooses the Linux personality.
has the
option with the argument
, and two more arguments
and
(they're argument to
itself, not to the
option). With a process ID as argument,
chooses the BSD output format. You get the same with
args
列(エイリアス、タイトル「CMD」)と列(タイトル「COMMAND」)command
の違いcomm
は、CMDはすべての引数がスペースで区切られた(切り捨てられる)コマンドラインを表示し、COMMANDは実行可能ファイル名のみを表示することです。 。通常、プログラムのコマンドラインの最初の引数(引数番号0)は通常、実行可能ファイルの名前です。ただし、シェルがログインシェルとして呼び出されると、パラメータ0の前にダッシュ(-
)が付けられます。これにより、シェルはログインシェルとして機能する必要があることを検出します。このトピックについては、以下を参照してください。ログインシェルと非ログインシェルの違いは何ですか?そして`--login`オプションで呼び出されたログインシェルで$ 0に単一のハイフンが表示されないのはなぜですか?
現れcsh
と親戚はどこかにtcsh
走ったという意味だcsh
。 ifがcsh
単に象徴的であるという事実に気づかなかったかもしれませんtcsh
。