PHP Cli 模式设置进程名称的方法

最近一直在优化自己的 PHP 多进程管理工具。GitHub 地址: https://github.com/fingerQin/phpthread

通过命令启动之后,它在系统后台运行的名称如下:

[root@localhost logs]# ps -ef|grep "Event/register"
root      1358  1356  0 19:50 ?        00:00:00 /usr/local/php72/bin/php cli.php Event/register
root      1482  1358  0 19:55 ?        00:00:00 /usr/local/php72/bin/php cli.php Event/register
root      1483  1358  0 19:55 ?        00:00:00 /usr/local/php72/bin/php cli.php Event/register
root      1484  1358  0 19:55 ?        00:00:00 /usr/local/php72/bin/php cli.php Event/register
root      1486  1358  0 19:55 ?        00:00:00 /usr/local/php72/bin/php cli.php Event/register
root      1487  1358  0 19:55 ?        00:00:00 /usr/local/php72/bin/php cli.php Event/register
root      1499  1240  0 19:56 pts/1    00:00:00 grep --color=auto Event/register

大家可以看到。它会把我们执行 PHP 脚本的整个命令路径全部显示出来。没办法伪装成一个特殊的名称,或者说优雅的名称。

查阅相关资料。其实 PHP 早已经支持这种操作。

一、proctitle 扩展实现

在 PHP 5.5.0 版本之前,只能通过 proctitle 扩展实现。下载地址: http://pecl.php.net/package/proctitle

关于安装这种 PHP C 扩展。这里就不展示说明。关于 PHP C 扩展的教程很多。

proctitle 扩展安装好之后。通过该扩展提供的 setproctitle 方法实现自定义进程名称。

process.php

<?php
setproctitle("NewProcess");
sleep(30);

此时我们命令运行脚本:

$php process.php

脚本会睡眠 30 秒。此时我们另开一个终端去查看该进程的名称。会发现该扩展名称已经被修改为:"NewProcess"。

由于该扩展已经 7 年未更新。所以,不推荐使用。

二、cli_set_process_title 方法实现

从 PHP 5.5.0 开始,PHP 已经内置了 cli_set_process_title 方法来解决这个重置进程名称的函数。我只能说,太贴心了。

使用也简单。

process2.php

<?php
cli_set_process_title("NewProcess");
sleep(30);

执行该脚本之后,咱们依然别启一个命令终端查看:

[root@localhost public]# ps -ef|grep NewProcess
root     10489  1240  0 09:49 pts/1    00:00:00 NewProcess
root     10496  1221  0 09:50 pts/0    00:00:00 grep --color=auto NewProcess

我们可以看到。已经生效了。

它就是如此简单。以后我们可以将该进程名称优雅化。也可以以此来伪装隐藏自己。总之,你可以用这个神奇的名字干你想干的事情。

总结

以上所述是小编给大家介绍的PHP Cli 模式设置进程名称的方法 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • PHP封装的HttpClient类用法实例

    本文实例讲述了PHP封装的HttpClient类.分享给大家供大家参考.具体分析如下: 这是一段php封装的HttpClient类,可实现GET POST Cookie Session等简单的功能.原来做过,这两天重新修改了一下. <?php /* * Filename: httpclient.php * Created on 2012-12-21 * Created by RobinTang * To change the template for this generated file go

  • PHP CLI模式下的多进程应用分析

    PHP在很多时候不适合做常驻的SHELL进程, 他没有专门的gc例程, 也没有有效的内存管理途径. 所以如果用PHP做常驻SHELL, 你会经常被内存耗尽导致abort而unhappy. 而且, 如果输入数据非法, 而脚本没有检测, 导致abort, 也会让你很不开心. 那? 怎么办呢? 多进程-. 为什么呢? 优点: 1. 使用多进程, 子进程结束以后, 内核会负责回收资源 2. 使用多进程,子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. 3. 一个常驻主进程, 只

  • php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法

    在php命令行下执行.php文件时,执行环境的工作目录(getcwd( ))是php命令程序(php.exe)所在目录,所以如果想在文件内使用相对路径时,要先切换当前的工作目录才行. 小测试程序: 复制代码 代码如下: <?php  $oldpath = getcwd();    // 原始工作目录 php.exe所在目录  $path = dirname(__FILE__);     chdir($path);           // 切换工作目录为当前文件所在目录  $fpath = &quo

  • php命令行(cli)模式下报require 加载路径错误的解决方法

    今天,同事突然告诉我,我写的一个做计划任务的php脚本执行总是不成功. 脚本本身很简单,里面只有包含了几个库文件并执行了一个函数,函数应该没有错误,这个函数在别处也调用过,没有问题.我在本地用浏览器访问页面,执行成功,看来没有问题,我有点怀疑是同事的计划任务的问题.我又打开命令行,用php直接执行脚本,这回报错了,是require 包含文件错误,看来是路径不对. 不明白是什么原因引起的,只是从报错来看是路径不对,我猜测是跟相对路径有关,于是把相对路径的全部改成绝对路径,再执行,问题解决. 在百度

  • 使用php+swoole对client数据实时更新(一)

    如果想对一个列表做实时的更新,传统的做法是采用轮询的方式.以web为例,通过Ajax定时请求服务端然后获取数据显示在页面.这种方式实现简单,缺点就是浪费资源. HTTP1.1新增加了对websocket的支持,这样就可以将被动展示转变为主动通知.也就是通过websocket与服务端保持持久链接,一旦数据发生变化,由server通知client数据有更新,然后再进行刷新等操作.这样就省去了很多不必要的被动请求,节省了服务器资源. 要实现一个webscoket的程序,首先需要使用支持html5的浏览

  • php cli配置文件问题分析

    引言 今天在教别人使用protobuf的时候,无意中发现了一个php cli模式下的诡异问题,费了老半天的找到解决方法了,这里拿出来分享下. 问题描述 我们这边最先引入了protobuf协议,使用的是allegro/php-protobuf这个扩展安装的.这几天其他同事也要用到这个,于是我将protobuf生成php类库文件的部分放到了一个公共的位置/data/php_proto/文件夹下,里面有这些内容, drwsrwxr-x 2 yanruitao users 4096 10月 14 17:

  • 标准版Eclipse搭建PHP环境的详细步骤

    一.下载Eclipse的PHP插件 百度搜索phpeclipse,看到某条结果是带有SourceForge.net字样的,点进去,找到Download按钮,点击之后,等待5秒就会开始下载了. 二.安装Eclipse的PHP插件 插件下载完成之后,解压,然后把site.xml删掉(大部分插件不用删这个文件,但是PHPEclipse必须删),最后把整个文件夹复制到Eclipse的dropins文件夹里面,重启Eclipse即可. 三.在Eclipse新建PHP工程和新建PHP文件 在插件安装成功的前

  • ThinkPHP在Cli模式下使用模板引擎的方法

    本文实例讲述了ThinkPHP在Cli模式下使用模板引擎的方法.分享给大家供大家参考.具体如下: 关于Cli模式与模版引擎,2.1中的手册是这样说明的: Cli模式默认不使用任何模板引擎(可以自己在操作方法里面调用): 但是怎么调用,手册中没有提到.于是自己动手丰衣足食. 在介绍怎么调用之前,简单的说说什么情况可能需要用到模块引擎: 1. 利用dompdf在计划任务自动生成PDF或HTML报告 2. 计划任务发送HTML类型的邮件 3. 后台自动生成静态页面 4. 其他关于模板的后台操作 <?p

  • PHP Cli 模式设置进程名称的方法

    最近一直在优化自己的 PHP 多进程管理工具.GitHub 地址: https://github.com/fingerQin/phpthread 通过命令启动之后,它在系统后台运行的名称如下: [root@localhost logs]# ps -ef|grep "Event/register" root      1358  1356  0 19:50 ?        00:00:00 /usr/local/php72/bin/php cli.php Event/register

  • Linux下C语言修改进程名称的方法

    本文实例讲述了Linux下C语言修改进程名称的方法.分享给大家供大家参考.具体如下: #include <stdio.h> #include <string.h> #include "./util/setproctitle.c" // extern char **environ; // int main(int argc , char *argv[]) // { // int i; // printf("argc:%d\n" , argc);

  • Python获取系统所有进程PID及进程名称的方法示例

    本文实例讲述了Python获取系统所有进程PID及进程名称的方法.分享给大家供大家参考,具体如下: psutil模块中提供了进程管理方法,引用其中的几个方法就能够获得进程的相关信息.简单写个小脚本测试一下,顺便看看本机Windows7系统中到底运行着多少个进程,进程都是什么. 代码: # -*- coding: utf-8 -*- #! python2 #!/usr/bin/python import psutil pids = psutil.pids() for pid in pids: p

  • php cli模式下获取参数的方法

    PHP在cli模式下接收参数有两种方法 1.使用argv数组 2.使用getopt方法 1.使用argv数组 例如:需要执行一个php,并传递三个参数(type=news, is_hot=1, limit=5) 创建test.php <?php print_r($argv); ?> 在命令行执行 php test.php news 1 5 输出: Array ( [0] => test.php [1] => news [2] => 1 [3] => 5 ) 可以看到ar

  • centOS7 桥接模式设置静态Ip的方法步骤

    前言 如果你虚拟机IP是自动获取的,难免会碰到IP经常变动,给xshell相关连接工具使用造成不便,那么怎么固定IP且正常访问外网地址呢?由于主机网络采用的是自动获取IP方式,所以每次重启机器可能导致IP地址的变更,不利于项目的部署和运行,查阅了一些资料后,为Linux虚拟机配置了静态IP地址.让小编告诉你 通俗的说,静态ip就是虚拟机的ip 外界想要连你的虚拟机的ip LinuX登入管理员的账号密码 一.虚拟机选择桥接方式 1.  在编辑--虚拟网络编辑器中打开编辑器,如下面这两个图所示,选择

  • centOS7 NET模式设置静态Ip的方法步骤

    前言 NAT转发:简单地说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关(可以理解为出口,打个比方就像院子的门一样)处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共 IP地址紧缺的问题.通过这种方法,可以只申请一个合法IP地址,就把整个局域网中的计算机接入Internet中.这时,NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,而内部网计

  • Tomcat在Linux服务器上的BIO、NIO、APR模式设置方法

    一.BIO.NIO.AIO 先了解四个概念: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API). 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回). 非阻塞 : 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到

  • C语言中设置进程优先顺序的方法

    C语言setpriority()函数:设置程序进程执行优先权 头文件: #include <sys/time.h> #include <sys/resource.h> 定义函数: int setpriority(int which, int who, int prio); 函数说明:setpriority()可用来设置进程.进程组和用户的进程执行优先权.参数which 有三种数值, 参数who 则依which 值有不同定义. which who 代表的意义: 1.PRIO_PROC

  • JSP 开发中过滤器filter设置编码格式的实现方法

    JSP 开发中过滤器filter设置编码格式的实现方法 我们知道为了避免提交数据的乱码问题,需要在每次使用请求之前设置编码格式.在你复制粘贴了无数次request.setCharacterEncoding("gb2312");后,有没有想要一劳永逸的方法呢?能不能一次性修改所有请求的编码呢? 用Filter吧,它的名字是过滤器, 代码如下: import java.io.IOException; import javax.servlet.Filter; import javax.ser

随机推荐