我使用tcsh (而不是csh),并运行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 tcshps --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采用三种不同的形式是很烦人的。
发布于 2016-11-27 17:06:31
您正在比较两个不同的字段。
注意标题行。有破折号的有COMMAND,而有tcsh的有CMD。请参阅“man 1 ps手册”页的“标准格式说明符”部分。
实质上:
cmd (CMD)是一个命令,它的所有参数都是字符串。comm (COMMAND)是进程正在运行的可执行文件的名称。在Linux中,还可以对整个进程使用prctl(PR_SET_NAME, string)进行设置,对单个线程使用pthread_setname_np(thread, string)进行设置。不过,string仅限于16个字符。
Shell通常根据它们在其中执行的符号链接或模式来设置它们的名称,这样流程列表在逻辑上看起来是正确的。特别是,以破折号(如-tcsh)开头的名称用于指示登录shell。
在OP的例子中,有三个shell运行tcsh shell二进制文件,这三个shell都是登录shell,但其中一个处于csh模式。
登录shell只是在某种交互模式下的shell;shell的行为与执行脚本的shell略有不同。把它看作是一种模式,它可以让shell更容易地用于人类,而脚本并不需要这种模式。
OP几乎可以肯定地将csh别名为tcsh,这三个shell分别使用tcsh -l、csh -l和bin/tcsh -l启动。若要查找命令启动的实际二进制文件,请使用realpath $(which command)。
https://unix.stackexchange.com/questions/326299
复制相似问题