我创建了一个iframe,
iframe的src是一个php脚本,
php脚本里面popen执行了一个shell命令:popen(‘ping 8.8.8.8’, "r");现在有这么个问题,无论我是换掉iframe的src,还是关闭iframe,还是关闭页面和浏览器,都无法停止ping命令,会一直执行下去。请教一下,有什么办法,可以停止那个ping的执行吗?

解决方案 »

  1.   

    我试了一下:
     假如后台是freebsd,那么部分命令如ping,在页面关闭的情况下,会自动停止ping,但是有的命令不行,如vmstat,页面关闭,后台的vmstat继续运行。假如后台是centos,那么基本上页面关闭了,后台命令都会自动运行各位有啥好的办法来处理后台通过popen或是其他函数调用的shell命令吗?
      

  2.   

    貌似通过php本身不好解决,最后我写了个shell脚本解决了。
    #$1: client ip
    #$2: client port
    #$3: cmd keyword used for killallpid=$$
    echo $1 $2 $$
    echo "netstat -an | grep \"$1:$2\""
    while [ 1 -eq 1 ]
    do
        result=`netstat -an | grep 'ESTABLISHED' | grep "$1:$2"`
        if [ "$result"x = x ];
        then
            echo "end"
            break
        fi
        echo "continue"
        sleep 1
    donekillall -9 "ping"
    kill $$在php里面popen('ping 8.8.8.8', 'r');之前,先执行这个脚本,分别将客户端ip,客户端端口,命令关键字作为3个参数传给这个shell脚本。
    当客户端连接断开后,这个shell脚本会kill掉ping(也就是命令关键字),和它自己。