【问题标题】:Ubuntu (linux in general) How to change name of background process?Ubuntu(一般是linux)如何更改后台进程的名称?
【发布时间】:2018-04-03 13:44:42
【问题描述】:

当我们从命令行运行“top”命令时,我们可以看到进程,并在 COMMAND 列下看到一个通用名称。 例如,如果我在后台运行一个 php 进程,例如

/usr/bin/php /path/to/myscript.php &

当我运行 top 时,我只看到 COMMAND 列下列出了 php

有没有办法在我运行时更改后台进程的名称?

*这个问题是 PHP 特有的。

【问题讨论】:

  • 看起来很像XY problem为什么需要更改后台进程的名称?这样做的理由很少。大多数 PHP(或其他)程序不需要这样做。如果您有一些相关的系统管理员问题,请告诉。
  • @BasileStarynkevitch 只是为了便于阅读。当您启动 25 个后台进程并执行 top 或 ps-uax 而不是所有进程都显示为 php.ini 时。如果它们显示为 php1、php2、php3.. 它会增加可读性。
  • 我认为这是错误的原因。你可以使用ps auxw

标签: php linux process


【解决方案1】:

一个进程实际上并没有名字,它有一个 pid(pid_t 类型的整数,fork(2) 或相关系统调用的结果)。阅读credentials(7)

显示的php名称是正确的,它是作为索引0的第一个参数给execve(2)的名称,它是程序名称。内核不直接运行您的 PHP 脚本,它运行的是 php 解释器,它将 作为输入 您的脚本(因此实际运行的程序是 php)。您的 shell 命令是明确/usr/bin/php 作为程序名称。您可以使用strace(1) 进行检查。

您的 shell 正在显示(通过jobs -lbackground processes。因此,您可以编写自己的 shell 以不同方式显示它们。

也许你可以用 C 编写一些包装 ELF 可执行文件,它执行适当的execve(2)

我不确定这样做是否值得。另请参阅 proc(5) 以了解应用程序(如您的 shell、pstop)如何向内核查询进程(使用 /proc/ 文件系统)。

正如melopmane 所评论的,还请查看prctl(2)PR_SET_NAME (我从来没有用过)。但是我确实使用了pthread_setname_np(3),它涉及一个线程

(不过,我认为你的情况不值得麻烦;有一个名为 php 的 PHP 进程有什么问题?)

另请参阅setproctitle,或在 C 中编写一些 PHP extension 来执行此操作...

但你不应该在意!而且我什至认为以这种方式更改进程名称会使系统管理员混淆。他想知道这是一些 PHP 的东西。因此,即使您可以滥用您的系统管理员,您也不应该这样做。

顺便说一句,您可以使用cat /proc/1234/maps 之类的命令(将 1234 替换为您的进程的实际 pid)检查(使用 proc(5)...)PHP 解释器是您的 virtual address space 的重要组成部分(所以没有理由像你想的那样“隐藏”php),你也可以使用pgrep(1) 找到你的特定php 进程(如果你有很多)。

【讨论】:

  • prctlPR_SET_NAME 怎么样?
猜你喜欢
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2023-02-06
相关资源
最近更新 更多