首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从PHP调用外部shell脚本并获取其进程ID

从PHP调用外部shell脚本并获取其进程ID
EN

Stack Overflow用户
提问于 2009-09-24 10:47:28
回答 3查看 23.5K关注 0票数 29

如何从PHP本身调用外部shell脚本(或外部PHP脚本),并在同一脚本中获取其进程ID?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-24 12:17:29

$command =  'yourcommand' . ' > /dev/null 2>&1 & echo $!; ';

$pid = exec($command, $output);

var_dump($pid);
票数 54
EN

Stack Overflow用户

发布于 2014-09-30 07:28:16

如果您想严格使用PHP提供的工具,而不是Unix-specific wizardry,您可以使用proc_openproc_get_status来实现,尽管需要将描述符规范传递到proc_open中,这使得使用它变得非常繁琐:

<?php

$descriptorspec = [
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['pipe', 'w']
];
$proc = proc_open('yourcommand', $descriptorspec, $pipes);
$proc_details = proc_get_status($proc);
$pid = $proc_details['pid'];

echo $pid;
票数 24
EN

Stack Overflow用户

发布于 2020-11-11 07:01:01

最后,我使用pgrep获取在PHP语言中调用exec()之后执行的命令(或进程名)的PID。

exec($command);
$pid = exec("pgrep $command");

这也适用于启动后台进程。但是,您必须记住将程序的输出通过管道传输到/dev/null,否则PHP将挂起。此外,在调用pgrep时,不能包含命令的管道部分:

$command = "bg_process -o someOption";
exec($command + " > /dev/null &"); //Separate the pipe and '&' from the command
$pid = exec("pgrep $command");

请注意,如果系统使用相同的命令启动了多个进程,它将返回与提供给pgrep的命令相匹配的所有进程的PID。如果只传入一个进程名,它将返回具有该进程名的所有PID。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1470910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档