У меня проблема с программой, написанной в C++
. Я хочу открыть прокси SOCKS5 на свободном порту, а затем проверить, нормально ли это (проверка с помощью curl), а затем отпустить блокировку ввода-вывода.
Это код:
С++
main()
{
char* s_sockshost = "127.0.0.1";
socks_port = find_empty_port();
if(fork())
{
// child process continues and opens a socks
open_proxy();
}
else
{
// parrent process just checks something then dies
for(int i = 0; i < 20; i++)
{
proxytest = curlsockstest(s_sockshost,socks_port);
if(proxytest)
{
break;
}
sleep(1);
}
if(proxytest)
{
if(hitdebug >= 3) printf("check_result : is opened on %s",socks_port);
exit(0); // kill just this process
}
else
{
if(hitdebug >= 3) printf("check_result : is bad\n");
kill(getppid(), SIGKILL); // kill both processes
}
}
}
Если я делаю это из cmd как
./proxy; ls -al;
то он выполняет и выполняет команду после него, но если я делаю это с PHP или NODEJS, он висит, как и ожидая завершения.
NODEJS:
var exec = require('child_process').exec;
var cmd = './proxy; ls -al;';
setTimeout(function(){
console.log("Timer");
exec(cmd, function(error, stdout, stderr) {
console.log("error: ");
console.log(error);
console.log();
console.log("stdout: ");
console.log(stdout);
console.log();
console.log("stderr: ");
console.log(stderr);
console.log();
});
console.log("Timer end");
},2000);
PHP:
<?php
echo "Run start\n";
$array_exec = array();
// exec("./proxy",$array_exec);
system("./proxy");
var_dump($array_exec);
echo "Run end\n";
?>
Что такое объяснение и как я могу это решить?
Я собираюсь заставить PHP и NODEJS общаться с этим С++-приложением с помощью sqlite
или что-то в этом роде...