server.php
/**
* 信息处理函数,结束进程.
*
*/
function sig_func()
{
echo "SIGCHLD \r\n";
pcntl_waitpid(-1, $status, WNOHANG);
}
for ($i = 0; $i < 2; $i++) {
pcntl_signal(SIGCHLD, 'sig_func');
$pid = pcntl_fork();
if ($pid == -1) {
die ("Cannot fork");
} elseif ($pid > 0) {
echo "父进程执行... \n";
//非阻塞方式
pcntl_wait($status, WNOHANG);
} else {
$p_id = getmypid();
echo "子进程执行, pid ", $p_id, " ... \n";
echo "111\n";
$shell = "cd /mnt/www/DIVIDE_PKG/Lib/dividePkg && ./resign sign -ipapath /Volumes/VMware\ Shared\ Folders/orgpkg/youxihezi.ipa -destpath /Volumes/VMware\ Shared\ Folders/subpkg1/youxihezi/vers_114/youxihezi_default.ipa -pppath /mnt/www/DIVIDE_PKG/Cert/2/mslabEnt.mobileprovision -agentid default";
// 执行shell脚本
$rst = execShell($shell);
echo "2222\n";
exit("子进程结束\n");
}
}
// // 等待子进程执行结束
while (pcntl_waitpid(0, $status) != -1) {
$status = pcntl_wexitstatus($status);
echo "Child $status completed\n";
}
运行php server.php 可以看到产生了2个子进程