ホームページ  >  記事  >  バックエンド開発  >  $cmd を借用してプログラムを実行した後、PHP を終了するにはどうすればよいですか?

$cmd を借用してプログラムを実行した後、PHP を終了するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-13 13:12:561610ブラウズ

PHP が $cmd を借用してプログラムを実行した後、それを閉じるにはどうすればよいでしょうか?
PHP を使用して exe プログラム (CRON やその他のスケジュール プログラムではなく、PHP には他の機能があります。これはテストに便利です。メモ帳を例にします) を実行し、開いてから 3 秒後に閉じたいと考えています。 。
操作方法は?
タスクマネージャーを呼び出してタスクを閉じることはできますか?コードを解いてください。ありがとう。

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php
$cmd = 'C:\WINDOWS\system32\notepad.exe';
system($cmd);
sleep(3);
//$cmd1 = 'C:\WINDOWS\system32\taskmgr_original.exe';
//system($cmd1);
?>


-----解決策---------------- - ---
PHP コード

<?php
$handle = Popen('C:WINDOWSsystem32notepad.exe', "r");
pclose($handle);
?>
<br /><font color='#e78608'>------解決策-----------</font><br />popen ― プロセスファイルポインタをオープンします<br /><br />説明<br />resource Popen (string $command, string $mode)<br />指定されたコマンドの実行によって生成されたプロセスへのパイプを開きます。 <br /><br />fopen() によって返されるファイル ポインタと同じファイル ポインタを返します。ただし、一方向であり (読み取りまたは書き込みにのみ使用可能)、pclose() で閉じる必要がある点が異なります。このポインタは、fgets()、fgetss()、および fwrite() で使用できます。 <br /><br />エラーが発生した場合は FALSE を返します。 <br /><br />注: <br /><br />双方向サポートが必要な場合は、proc_open() を使用してください。 <br /><br /><br /><br />例 1 Popen() 例<br /><br /><?php<br />$handle = Popen("/bin/ls", "r");<br />?><br /><br />注: <br /><br />実行するコマンドが見つからない場合は、正当なリソースが返されます。これは奇妙に思えますが、理にかなっています。これにより、シェルによって返されたエラー情報にアクセスできます: <br /><br /><?php<br />error_reporting(E_ALL);<br /><br />/* 標準エラー出力 stderr を取得するためのリダイレクトを追加します。 */<br />$handle = Popen('/path/to/spooge 2>&1', 'r');<br>echo "'$handle'; " . gettype($handle) ";<br>$read = fread($handle, 2096);<br>echo $read;<br>pclose($handle);<br>?> <br><br><br>
<br><font color="#e78608">------解決策---------</font><br>
話し合う
PHP コード

$handle = Popen('C:WINDOWSsystem32notepad.exe', "r");
pclose($handle);
?> ;

------解決策---------
popen は PHP 環境で notepad.exe を返します。の下のポインタ、このポインタはメモ帳へのデータの読み取りと出力にのみ使用できます。pclose はこのポインタのみを閉じ、メモ帳自体を閉じる方法はわかりませんが、そうすべきだと思います。 Windows から 「プログラミングの基礎」のタスク マネージャーでプロセスを取得する方法を確認し、システム関数を使用して Windows シャットダウン プログラムを呼び出します。

------解決策------------------
Popen は一方向です。proc_open を使用してください試してみましょう

PHP コード
/**※窓のみ*/ $descriptorspec = 配列( 0 => 配列("パイプ", "r"), 1 => 配列("パイプ", "w") ); $cwd = 'C:WINDOWSsystem32'; $process = proc_open('notepad.exe', $descriptorspec, $pipes, $cwd); $s = proc_get_status( $process );//取得される情報は親プロセス cmd.exe のステータスであり、子プロセス notepad.exe のステータスではないため、プロセス ID を直接強制終了することはできません。 スリープ(3); exec('taskkill /PID '.$s['pid'] . ' /T'); // ツリーの削除、すべての親プロセスと対応する子プロセスを削除します。私は当初、子プロセス ID が親プロセスより大きい必要があると考えていました。コードを渡した後、後でそうではないことがわかり、このコマンドを見つけました。 proc_close( $process );
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。