首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用参数启动一个进程,而不等待它完成并在PHP中获得PID?

在PHP中,可以使用exec()函数来启动一个进程,并且不等待它完成。exec()函数用于执行外部命令,并返回最后一行输出。要获取启动进程的PID,可以使用proc_open()函数。

下面是一个示例代码:

代码语言:txt
复制
$command = 'your_command_here';
$descriptorspec = array(
    0 => array("pipe", "r"),  // 标准输入
    1 => array("pipe", "w"),  // 标准输出
    2 => array("pipe", "w")   // 标准错误输出
);

$process = proc_open($command, $descriptorspec, $pipes);

if (is_resource($process)) {
    // 关闭标准输入
    fclose($pipes[0]);

    // 获取进程的PID
    $status = proc_get_status($process);
    $pid = $status['pid'];

    // 关闭标准输出和标准错误输出
    fclose($pipes[1]);
    fclose($pipes[2]);

    // 等待进程结束
    proc_close($process);

    // 在这里可以使用PID进行其他操作
    echo "PID: " . $pid;
}

在上面的代码中,$command变量是要执行的命令,可以是任何可执行的命令。$descriptorspec数组定义了进程的输入、输出和错误输出的管道。proc_open()函数会返回一个资源类型的对象,表示新创建的进程。通过调用proc_get_status()函数,可以获取进程的状态信息,其中包括PID。最后,使用proc_close()函数关闭进程。

请注意,这只是一个简单的示例,实际使用时可能需要根据具体情况进行调整和处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Swoole 学习:协程、线程、IO多路复用、PHP进程

共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低专门设计的。往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。...一个键盘中断或者一个错误条件(比如进程试图访问的虚拟内存不存在的位置等)都有可能产生一个信号。Shell也使用信号向的子进程发送作业控制信号。...在unix进程管理,如果你新开的子进程运行结束,父进程将会收到一个SIGCHLD信号,子进程成为僵尸进程(保存了进程的状态等信息),等待进程的处理,如果父进程一直处理,该进程将会一直存在,占用系统进程表项...用户使守护进程独立于所有终端是因为,在守护进程一个终端启动的情况下,这同一个终端可能被其他的用户使用。例如,用户从一个终端启动守护进程后退出,然后另外一个人也登录到这个终端。...用户希望后者在使用该终端的过程,接收到守护进程的任何错误信息。同样,由终端键人的任何信号(例如中断信号)也不应该影响先前在该终端启动的任何守护进程的运行。

53260

【Swoole系列3.3】单进程管理Process

今天我们来看到的就是在 Swoole 如何操作单个进程,其实也就是学习一个 Process 对象的使用。...僵尸进程出现了,那么我们也需要一种方式来处理这些进程,大部分程序提供的都是 wait() 函数,Swoole 也例外。但是,它会阻塞主进程,从名字意思就可以看出,的作用是等待进程执行完成。...wait() 方法有一个参数,意思是设置为 false 的话以非阻塞状态等待回收。但这个时候你设置为 false 也是没用的,必须通过另外的方式来实现非阻塞回收。...在这里,我们直接还是使用 php 命令行去进行一个简单的计算,其实就是执行了上面注释的那个命令行语句。...参数是从0开始的数据,比如4核的 CPU 可以使用的范围就是 0-3 。 setPriority() 函数用于设置进程的优先级,级别是从 -20 到 20 之间的数字,越小级别越高。

68620

PHP-FPM 的管理和配置详解

Web服务器启动时,载入FastCGI进程管理器; 2. FastCGI进程管理器初始化,启动多个CGI解释器进程(PHP-CGI)并等待来自Web服务器的连接; 3....FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web服务器)的下一个连接。而在CGI模式PHP-CGI在此便退出了。...在上述情况,可以想象CGI通常有多慢,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展,并重初始化全部数据结构。而使用FastCGI,所有这些都只在进程启动时发生一次。...5)、对比Spawn-FCGI PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,启动、重启都可以从php/sbin/PHP-FPM中进行。...启动 php-fpm php-fpm -D # 关闭 php-fpm kill -INT [pid] # 重启 php-fpm kill -USR2 [pid] ps 是展示当前进程的快照。

82510

Android应用进程启动过程(前篇)

前言 在此前我讲过Android系统的启动流程,系统启动后,我们就比较关心应用程序是如何启动的,这一篇我们来一起学习Android7.0 应用程序进程启动过程,需要注意的是“应用程序进程启动过程”,不是应用程序启动过程...当然,在应用程序创建过程除了获取虚拟机实例,还可以获得Binder线程池和消息循环,这样运行在应用进程应用程序就可以方便的使用Binder进行进程间通信以及消息处理机制了。...,zygoteSendArgsAndGetResult函数一个参数调用了openZygoteSocketIfNeeded函数,第二个参数是保存应用进程启动参数的argsForZygote。...注释3处调用Zygote的forkAndSpecialize函数来创建应用程序进程参数为parsedArgs存储的应用进程启动参数,返回值为pid。...forkAndSpecialize函数主要是通过fork当前进程来创建一个进程的,如果pid等于0,则说明是在新创建的子进程执行的,就会调用handleChildProc函数来启动这个子进程也就是应用程序进程

1K80

Linux小课堂之Wait命令

wait是一个shell命令,等待给定进程完成,然后返回其退出状态。 Wait命令用于等待特定的进程ID和作业ID并返回其终止状态。...在执行大型自动化流程时,我们需要使几个模块等待到上一组模块完成并返回数据管道进入下一个模块的数据,在这种情况下,我们可以使用Wait命令直到完成一个模块。 Wait命令如何工作?...'Foo.sh'脚本的输出数字介于1到5之间,'bar.sh'脚本将调用foo.sh并在后台运行,获取foo.sh的PID等待完成,一旦完成,它将启动“ bar.sh”完成循环。...'foo.sh'脚本输出的数字介于1到5之间,bar.sh脚本将调用foo.sh并在后台运行,但它不会等待foo.sh完成并执行这两个脚本。 Script – foo.sh ?...示例3 –具有wait命令和返回状态的脚本 “ bar.sh”脚本将调用foo.sh并在后台运行,获取foo.sh的PID等待完成,一旦完成,它将启动bar.sh循环,最后,返回 foo.sh脚本的退出代码

2.3K20

什么是PHP7的孤儿进程与僵尸进程

一个 进程完成的工作终止之后,的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。...孤儿进程 一个进程退出,一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。...僵尸进程 一个进程使用fork创建子进程,如果子进程退出,进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程进程描述符仍然保存在系统。这种进程称之为僵死进程。...每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,init进程会循环地wait()的已经退出的子进程。...那么,pcntl_waitpid()如何正确使用啊?这样用,看起来毕竟不太科学。 那么,是时候引入信号学了!

86430

Python多进程及多线程基础

进程之间相互独立,同一个变量,多进程各自会拷贝一份,一个进程的多个线程是共享内存的,所有变量都由所有线程共享,从而提升程序的运行效率。...4)阻塞状态:进程正在等待某一事件暂停运行。如等待可用资源或等待输入输出完成。即使处理器空闲,该进程也不能运行。 5)死亡状态:进程正在从系统消失。...阻塞——>就绪:当所等待事件发生,如得到申请资源,I/O传输完成进程由阻塞变为就绪状态 Python如何使用进程 Python中使用multiprocessing模块创建进程 multiprocessing...target_func) p.start()#使用start方法启动进程 p.join()#等待进程结束 print("主进程pid:",os.getpid...ppid: 4256 主进程pid:4256 子进程名字 Process-3 子进程PID:4468 子进程的父进程ppid: 4256 主进程pid:4256 Python如何使用多线程 在python

77610

PHP进程管理器php-fpm配置说明

启动php-fpm之后,会创建一个master进程,监听9000端口(可配置),master进程又会根据fpm.conf/www.conf去创建若干子进程,子进程用于处理实际的业务。...listen.allowed_clients = 127.0.0.1 #pid进程文件存放的位置,当我们启用一个php服务,#则会自动创建一个pid文件,其实我们可以直接把该文件理解理解php-fpm...的值初始化对应的子进程数,至少一个进程);#ondemand(按需配置,在启动php-fpm时创建子进程,而是根据请求动态fork子进程);pm = dynamic #最大子进程数量pm.max_children...大致的意思,就是该目录下面的文件是不是存储再硬盘的,而是存储再内存的。至于硬盘读取和内存读取,谁快谁慢,肯定是内存最快了。 socket方式启动如何查看socke文件。...socket文件是根据上面提到的pid配置项而定的。我们可以直接使用cat命令,查看进程号。 ?

2.1K40

2017,科学使用strace神器(附代码,举栗子)

Strace是一个简单的跟踪系统调用执行的工具。在其最简单的形式,它可以从开始到结束跟踪二进制的执行,并在进程的生命周期中输出一行具有系统调用名称,每个系统调用的参数和返回值的文本行。...它可以通过pid附加到任何正在运行的进程。 如果您使用过其他Unix系统,这与“truss”类似。另一个(更全面)是Sun的Dtrace。...如何使用它 这只是划伤表面,没有特定的重要性顺序: 1)找出程序在启动时读取的配置文件 曾经试图搞清楚为什么一些程序不读取你认为应该的配置文件?...上面是一个正常工作但空闲的Apache子进程,只是等待提交请求。但是“strace -p”非常有用,因为删除了很多猜测,并且通常不再需要重新启动具有更广泛日志记录(甚至重新编译)的应用程序。...-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid,pid是各进程进程号. -F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.

1.2K20

和老李一起搞山寨Workerman(三)

随着篇幅继续,主要矛盾由僵尸进程的产生逐步转移到了如何解决僵尸进程。在PHP则是由pcntl_wait()和pcntl_waitpid()两个函数来解决。...) : int 参数:$status这种用法叫做[ 值 - 参数 ],pcntl_wait()会将状态信息存储到这个变量;$options是一个选项配置,如果贵系统支持wait3系统调用,这个参数就会生效...只是有些复杂: <-1:等待任意进程组ID等于参数pid给定值的绝对值的进程 =-1:等待任意子进程;与pcntl_wait函数行为一致 =0:等待任意与调用进程组ID相同的子进程 >0:等待进程号等于参数...在此我需要向诸君说明一个进程的[ 终止 ]和[ 停止 ]是两个决然不同的概念,[ 终止 ]意味着进程君生命周期已经完成,或正常完成或者异常终止;[ 停止 ]意味着临时挂起,还会复活继续活动。...,不会阻塞等待任一子进程结束,这一功能最大的作用就是:我们期盼获得到所有子进程的状态不是想被阻塞,这一要点在有多个子进程的时候显得颇为至关重要。

1.1K61

【Swoole系列3.6】进程同步与共享内存

当 atomic 的值为 0 时,如果调用了 wait() 就会启动进入等待状态。等待什么呢?当调用了 weakup() 方法或者将 atomic 的值设置为 1 后,wait() 就会结束。...wait() 的参数表示要等待多久,如果设置为 -1 的话就是永久等待,否则就是按参数值的秒数等待,超时后直接就不等了,继续运行。...在这个时候,我们就可以为这种操作加锁,让同一时刻内只能有一个进程来操作这个资源,这样的结果是确定,不是模糊的。...第一个进程启动后加锁,然后休息 3 秒,第二个进程进来后也想加锁,但是第一个进程已经加上锁了,所以它要等待一个进程释放掉锁,这里也可以看到是 3 秒后,第二个进程获得了锁。...比如说只是简单地数字累加就完全可以使用计数器,操作同一个句柄文件时,就加个锁,在这个文件中所有的进程都可以读取到的数据。其实这样也是一种进程间通信和数据同步的方式。

58720

【多进程php进程编程

extension=pcntl 加到php.ini文件 使用 php -m 查看模块是否被加载!...pcntl_waitpid() — 等待或返回fork的子进程状态,挂起当前进程的执行直到参数pid指定的进程号的进程退出, 或接收到一个信号要求中断当前进程或调用一个信号处理函数。...:/home/demo# php index.php 启动进程 150 启动进程 151 启动进程 152 子进程 152 正在处理任务 子进程 151 正在处理任务 子进程 150 正在处理任务...18 0:00 ps -aux 当子进程使用 kill -9 进程id 强制杀死的时候如何处理?...pcntl_wifsignaled — 检查子进程状态码是否代表由于某个信号中断 pcntl_wtermsig — 返回导致子进程中断的信号 我们打开两个窗口,其中一个 ? ?

87320

Posix多线程编程

从上面我们知道了进程和线程区别,使用多线程首先是要和进程相对比,它是一种非常便捷的多任务操作方式;我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护的代码段...运行于一个进程的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。...void *arg:线程将执行的函数的参数。如果想传递多个参数,请将它们封装在一个结构体。...34 pthread_join(pid, NULL); 35 pthread_join(pid1, NULL); 36 return 0; 37} 注意,在gcc,默认是包含线程相关的库的...图4-3-27 创建线程的实验结果 pthread.c创建了2个线程,并在线程实现打印功能,最终调用pthread_join等待子线程运行结束,一并退出。

77840

linux系统编程之进程(四):waitwaitpid函数与僵尸进程、fork 2 times

进程表中代表子进程的数据项是不会立刻释放的,虽然不再活跃了,可子进程还停留在系统里,因为的退出码还需要保存起来以备父进程后续的wait/waitpid调用使用。它将称为一个“僵进程”。...也可以忽略SIGCHLD信号,接收在信号处理函数调用wait/waitpid。 // 让子进程退出后自动回收,避免成为僵尸或者需要父进程 wait。...函数原型 pid_t wait(int *status) 函数参数 status:该参数可以获得等待进程的信息 返回值: 成功等待进程,  函数返回等待进程的ID wait系统调用会使父进程暂停执行...在一个进程终止前, wait 使其调用者阻塞,waitpid 有一选择项,可使调用者阻塞。 waitpid并不只能等待一个终止的子进程—它有若干个选择项,可以控制它所等待的特定进程。...,不仅仅是第一个退出的子进程      * 且可以设置option为WNOHANG,即阻塞等待 */     printf("ret=%d, pid=%d\n", ret, pid);     if

3.1K70

spawn-fcgi原理及源码分析「建议收藏」

spawn-fcgi是一个小程序,作用是管理fast-cgi进程,功能和php-fpm类似,简单小巧,原先是属于lighttpd的一部分,后来由于使用比较广泛,所以就迁移出来作为独立项目了,本文介绍的是这个版本...另外phpphp-fpm后,码农们再也担心跑起FCGI了。 很久之前看的spawn-fcgi的代码,当时因为需要改一下里面的环境变量。今天翻代码看到了就顺手记录一下,就当沉淀.备忘吧。...其功能主要是打开监听端口,绑定地址,然后fork-exec创建FCGI进程,退出完成工作。 老方法,main函数使用getopt解析命令行参数,从而设置全局变量。...其参数unixsocket表明需要使用unix sock文件,这里不多介绍。...对于父进程: 主要需要用select等待一会,然后调用waitpid用WNOHANG参数获取一下子进程的状态等待进程退出,如果失败就打印消息。否则将其PID写入文件。

2.3K10

《Linux操作系统编程》 第六章 Linux进程监控: fork函数的使用,以及父子进程间的关系,掌握exec系列函数

理解:Linux进程创建时环境变量、命令行参数的设置,理解父进程等待进程结束和获得进程返回值的原理; 掌握:fork函数的使用,以及父子进程间的关系,掌握exec系列函数。...exec系列函数经常在前三个函数使用之后调用,来创建一个全新的程序运行环境。exec函数簇提供了一个进程启动一个程序执行的方法。...▪ 生命周期大致分为三种状态: - 运行态:进程正占用CPU和其它资源进行运算. - 就绪态:进程已做好一切准备, 等待获得CPU投入运行. - 睡眠态:进程等待输入输出或其它系统资源, 让出CPU...waitpid函数的pid参数怎样设置表示等待任一子进程终止? 答:pid设置为 -1代表等待任意子进程状态改变(同wait)。 4.在Linux什么情况下使用exec函数簇?...exec函数簇提供了一个进程启动一个程序执行的方法。

14210

python基础篇大合集,进程、装饰器、列表详解篇!

进程的状态 工作,任务数往往大于cpu的核数,即一定有一些任务正在执行,另外一些任务在等待cpu进行执行,因此导致了有了不同的状态。...,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动 2....Process创建的实例对象的常用方法: start():启动进程实例(创建子进程) is_alive():判断进程进程是否还在活着 join([timeout]):是否等待进程执行结束,或等待多少秒...,比如 在一台电脑上能够同时运行多个QQ 线程,能够完成多任务,比如 一个QQ的多个聊天窗口 定义的不同 进程是系统进行资源分配和调度的一个独立单位....线程和进程使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;进程正相反。

1.1K20

Linux下进程相关知识

一个进程一个正在运行的程序的实例,打开3个终端窗口,在两个窗口中运行cat命令,传递任何选项(cat进程将作为一个进程保持打开状态,因为期望stdin)。...bash shell的PID是ps l命令的PPID。 当系统启动时,内核创建了一个名为init的进程PID为1。除非系统关闭,否则无法终止init进程。...我们仍然希望能够看到子进程如何终止的,因此即使子进程完成了,内核也会将子进程变成僵尸进程。子进程使用的资源仍然被释放给其他进程使用,但是进程仍然有这个僵尸进程的条目。...你将看到的最常见的如下所示: R: running或runnable,只是在等待CPU处理 S:可中断休眠,等待一个事件完成,例如来自终端的输入 D:不间断睡眠,不能被信号杀死或中断的进程,通常要让它们消失...如果查看ps输出PID,则可以在/proc目录中找到。 进入其中一个进程并查看该文件: 你能看到进程状态信息以及更详细的信息。

1.4K50
领券