This works finally...
the ignore_user_abort() was set to false before. Manual is also
misguiding. Also ob_flush() is necessary sometimes after flush() as
said in manual too...
"back" is to run the program in backgroun. It is mikehup available at
http://www.mikekohn.net/mikehup.php.
Thanks
_Shyren_____________________________________
<?php
set_time_limit(0);
ignore_user_abort(TRUE);
#register_shutdown_function('kill_my_cpp_prog');
$hostid = hexdec(shell_exec("hostid"));
$td = gettimeofday();
$pass_id=$td["sec"].$td["usec"]. getmypid(). $hostid;
$pass_id="/tmp/my".$pass_id;
#$pass_id="/tmp/num";
function kill_my_cpp_prog()
{
global $pass_id;
$file=fopen($pass_id,"w");
$num="exit";
fwrite($file,$num);
fclose($file);
echo "in";
exit();
}
$com="./back ./test ".$pass_id." &";
#$com="./test ".$pass_id." &";
echo $com;
flush();
ob_flush();
exec($com,$out,$in);
echo $out[0];
sleep(1);
while(1)
{
echo ".";
flush();
ob_flush();
if(connection_status() && connection_aborted())
{
kill_my_cpp_prog();
}
if(file_exists("/tmp/nun"))
{$file=fopen("/tmp/nun","r");
$num=fgets($file,7);
echo $num;
fclose($file);
if($num=="finish")
exit();
}
sleep(1);
$i--;
}
?>
______________________________________
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc,const char** argv)
{
cout<<argv[1];
bool check=0;
ofstream fl1("/tmp/nun",ios::out);
for(int i=0;i<30;i++)
{
fstream fl(argv[1],ios::in);
char tmp[5];
fl.getline(tmp,5);
cout<<" "<<tmp;
if(string(tmp)=="exit")
{
i=30;
check=1;
}
fl.close();
sleep(1);
}
if(!check)
{
char *str="finish";
fl1.write(str,7);
}
fl1.close();
return 0;
}