Hi,
I am struggling to find a way to kill a proc_open() stream if it remains idle (hangs). Specifically, I am opening an SSH connection up and running a remote command - all from a PHP script run from the shell. Under the rare circumstance that my passwordless authentication fails (ie: it sits there waiting for a password), I want to be able to 1) check to see if this is the case 2) kill the stream 3) move on to other tasks. My "solution" (it doesn't work) has been to set blocking to false, and check to see if it continues looping in the fread() for 5 seconds. If the loop is > 5 seconds, I try to send a CTRL-C to the opened ssh command, break out of the loop and move on. But, the CTRL-C doesn't kill the ssh command, and the script gets stuck (ie: it doesn't do it's var_export) until I manually CTRL-C from the shell. looks like this so far: $spec = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("file", "/tmp/error-output.txt", "a") ); $process = proc_open(''ssh somehost someremotecommand';', $spec, $pipes); if (is_resource($process)) { stream_set_blocking($pipes[1], false); stream_set_blocking($pipes[0], false); $contents = ''; $time = time(); while (!feof($pipes[1])) { $contents .= fread($pipes[1], 8192); if (time() - $time > 5) { // send ctrl-c fwrite($pipes[0], chr(4)); break; } } fclose($pipes[0]); fclose($pipes[1]); $return_value = proc_close($process); } var_export($contents); die(); Any ideas on how I can do this? CONFIDENTIALITY NOTICE This message contains confidential information intended only for the use of the individual or entity named as recipient. Any dissemination, distribution or copying of this communication by anyone other than the intended recipient is strictly prohibited. If you have received this message in error, please immediately notify us and delete your copy. Thank you. AVIS DE CONFIDENTIALITÉ Les informations contenues aux présentes sont de nature privilégiée et confidentielle. Elles ne peuvent être utilisées que par la personne ou l'entité dont le nom paraît comme destinataire. Si le lecteur du présent message n'est pas le destinataire prévu, il est par les présentes prié de noter qu'il est strictement interdit de divulguer, de distribuer ou de copier ce message. Si ce message vous a été transmis par mégarde, veuillez nous en aviser immédiatement et supprimer votre copie. Merci.