当我们从命令行运行“top”命令时,我们可以看到进程,在COMMAND列下我们看到一个通用名称。 对于e,g如果我在后台运行php进程,如
/usr/bin/php /path/to/myscript.php &
当我运行php
时,我在COMMAND列下看到了top
。
有没有办法在运行后更改后台进程的名称?
*这个问题是特定于PHP的。
答案 0 :(得分:-2)
进程实际上没有名称,它有一个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,ps
或top
)如何查询内核的进程(使用/proc/
文件系统)。
如melopmane所述,请同时查看prctl(2)和PR_SET_NAME
(我从来没用过)。但是我使用pthread_setname_np(3)来关注线程。
(但是,我认为在您的案例中值得麻烦;使用名为php
的PHP流程有什么问题?)
另请参阅setproctitle,或在C中编写一些PHP extension来做到这一点......
但是你不应该在意!我甚至认为改变你的进程名称会使混淆到sysadmin。他想知道这是一些PHP的东西。所以,即使你可以滥用你的系统管理员,你也不应该这样做。
BTW,您可以使用cat /proc/1234/maps
之类的命令(使用您的进程的实际pid替换1234)来检查(使用proc(5) ...)PHP解释器是您{的重要部分{ {3}}(因此没有理由"隐藏" php
,你可以找到你的特定php
进程(如果你有很多)同时使用virtual address space。