首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"ps -p proc1 proc2 proc3“显示"-csh”、"-tcsh“和"-/bin/tcsh",而"ps -p proc[n]”则分别表示"tcsh"?

为什么"ps -p proc1 proc2 proc3“显示"-csh”、"-tcsh“和"-/bin/tcsh",而"ps -p proc[n]”则分别表示"tcsh"?
EN

Unix & Linux用户
提问于 2016-11-27 02:56:03
回答 1查看 515关注 0票数 1

我使用tcsh (而不是csh),并运行pgrep csh | xargs ps -p来了解我为什么要运行csh。部分结果:

代码语言:javascript
复制
 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,得到了同样的东西:

代码语言:javascript
复制
  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

代码语言:javascript
复制
  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.10tcsh --version的收益率tcsh 6.19.00 (Astron) 2015-05-21 (x86_64-unknown-linux) options wide,nls,dl,al,kan,sm,rh,color,filec

为什么会有这种奇怪的行为?我正在尝试编写一个进程监视器,让tcsh采用三种不同的形式是很烦人的。

EN

回答 1

Unix & Linux用户

发布于 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 -lcsh -lbin/tcsh -l启动。若要查找命令启动的实际二进制文件,请使用realpath $(which command)

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/326299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档