gpt4 book ai didi

php - Ubuntu(一般是linux)如何更改后台进程的名称?

转载 作者:太空宇宙 更新时间:2023-11-04 05:36:32 24 4
gpt4 key购买 nike

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

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

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

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

*这个问题是 PHP 特定的。

最佳答案

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

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

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

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

我不确定是否值得这么麻烦。另请参阅proc(5)了解应用程序(例如您的 shell、pstop)如何查询内核有关进程的信息(使用 /proc/ 文件系统)。

正如 melopmane 评论的,另请参阅 prctl(2)PR_SET_NAME(我从来没有用过)。不过我确实使用了 pthread_setname_np(3)这涉及一个线程

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

另请参阅setproctitle ,或者写一些PHP extension在 C 中做到这一点...

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

顺便说一句,您可以使用 cat/proc/1234/maps(将 1234 替换为进程的实际 pid)之类的命令来检查(使用 proc(5) ...)PHP 解释器是否是 virtual address space 的重要组成部分。 (因此没有理由按照您的意愿“隐藏”php),并且您还可以使用 pgrep(1) 找到您的特定 php 进程(如果您有很多进程) .

关于php - Ubuntu(一般是linux)如何更改后台进程的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46882093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com