Como disse, havia comprado um livro em que ensinava como fuçar no PHP, relacionado a função fork, que existe no C e na maioria das linguagens.
Como o PHP, por padrão de sua criação, foi criado para ser uma linguagem CGI, não havia muito sentido ela ter esta função. Com o advento do PHP sendo usado como o Perl e o Python para criar aplicações em linha de comando, era lógico que estas funções não poderiam ficar de fora, e eu estava a um bom tempo procurando a função fork() no PHP.
Achei, com este livro me ensinando e resolvi que era hora de começar a fuçar hoje. Os códigos citados abaixo, rodaram sem problemas no SLACKWARE e no OpenSuSe 10.2 ( Notebook ), e pareceu-me bem tranquilo de trabalhar, já que o básico de processos no PHP está aí ( logicamente, lembrando que no OpenSuSe você vai ter que instalar os pacotes php-pcntl e php-posix ).
O primeiro código é o clássico eu sou o processo pai e este é o meu processo filho. Interessante, pois mostra como se usar o PHP e o fork para criar processos no sistema operacional :
<?php
$child_pid = pcntl_fork();
if ( $child_pid == -1 )
{
die("pcntl_fork() failed : $php_errorstr");
}
else if ( $child_pid )
{
printf("I am the parent, my pid is %d and my child's pid is .%d. \n",posix_getpid(),$child_pid);
}
else
{
printf("I am the child, my pid is %d", posix_getpid());
}
?>
O outro, é que é o mais legal, gostei. Ele executa um ls, e espera o outro processo acabar.
<?php
$child_pid = pcntl_fork();
if ( $child_pid == 0 ) {
// substitua o php com o comando ls
pcntl_exec("/bin/ls",array("-la"));
}
elseif ( $child_pid != -1 )
{
// espere pelo processo
pcntl_waitpid($child_pid,$status,0);
}
?>
E por final, um semi-daemon.
<?php
$pid = pcntl_fork();
if ( $pid )
{
exit(0);
}
// cria uma nova seção, desligando-se do processo shell original
posix_setsid();
// se as constantes STD(IN,OUT,ERR) precisam tornar-se indisponveis, é aqui que se fecha as
// mesmas
while(true)
{
error_log("heartbeat \n",3,"/tmp/test.log");
sleep(10);
}
?>
Nenhum dos três códigos, a priori, tem grande utilidade, tirando a acadêmica, de estudo. E, logicamente, este post, em termos de falar sobre a linguagem e sobre o que foi usado, não foi nada útil.
Mas, literalmente, com isto, eu quis realmente mostrar algo que descobri, o PHP é muito mais do que uma linguagem para criar portais páginas dinâmicas.
Somado ao PHP-GTK ou o PHP-NCURSES, a coisa pode ficar muito mais legal :-)
Idéias, idéias, idéias ... é o que mais está aparecendo nesta cabeça nerd após esta descoberta hehehehe