skeeper
Guest
Проблема с процессам pcntl
Перепробовал все что только можно, код уже искорежил до безумия, но все равно процессы плодятся и не убиваются =((
Точнее <defunct> - может так и надо, но мне кажется что это не правильно. Подскажите плз. где грабли
Перепробовал все что только можно, код уже искорежил до безумия, но все равно процессы плодятся и не убиваются =((
Точнее <defunct> - может так и надо, но мне кажется что это не правильно. Подскажите плз. где грабли
PHP:
function RunProcess() {
global $child,$max
for ($i = 1; $i <= 10; $i++) {
while ($child >= $max) {
}
$child++;
$pid=pcntl_fork();
if ($pid == -1) {
die("could not fork");
} elseif ($pid) {
$fl = fopen ('./pids', "a");flock($fl, LOCK_EX);fputs ($fl, $pid."\n");flock($fl, LOCK_UN);fclose ($fl);
} else {
DownloadPage();
exit;
}
}
function sig_handler($signo) {
global $child;
switch ($signo) {
case SIGCHLD:
$child -= 1;
}
}
declare(ticks = 1);
pcntl_signal(SIGCHLD, "sig_handler");
$max=10;
for ($i = 1; $i <= 10; $i++) {
$child=0;
RunProcess();
$lines = file ('./pids');
foreach ($lines as $line_num => $line) {
$line = trim($line);
posix_kill($line, SIGTERM);
}
// ВОТ КОГДА $i =2 и больше ps -A показывает порядка
// 10 строчек
// pts/0 00:00:00 php
// и очень много строчек
// 4448 ? 00:00:00 php <defunct>
// Когда эту прогу тушишь Ctrl-c то все процессы медленно исчезают
}