問題タブ [proc-open]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - stream_select とともに使用すると、php の proc_open を介して開かれたパイプからの読み取りが常にブロックされる
以下を使用してユーザーの操作を必要とするプロセスと話しています (PHP 5.3/Ubuntu 12.04)、
そして、これは私の C でのテスト プログラムです。
現在、問題は、書き込みがブロックされない場合に非ブロックに設定されていても、$r
常に空です。ただし、読み取りと書き込みをテスト プログラムに一致させれば、問題なく動作します。stream_select
$pipes[1]
$pipes[0]
stream_select
ここで何が起こっているのか理解できませんでした。ここでは、ある種の Web ベースの端末エミュレーターを実現しようとしています。これを行う方法に関する提案は大歓迎です:)
php - proc_open()による複数入力
私は現在オンラインプログラムに取り組んでいます。proc_open()を使用してコマンドラインでコマンドを実行するphpスクリプトを作成しています(Linux Ubuntuの場合)。これはこれまでの私のコードです:
powerは、入力を2回要求するプログラムです(基数と指数を取り、基数^指数を計算します)。アセンブリで書かれています。しかし、このスクリプトを実行すると、間違った出力が得られます。私の出力は「1」ですが、出力として4^5を期待しています。
1つの入力を受け取るプログラムを実行すると、動作します(入力した値を1つ増やす簡単なプログラムをテストしました)。
fwriteコマンドに関して何かが足りないと思います。誰か助けてくれませんか?
前もって感謝します!
php - fclose():18は有効なストリームリソースではありません
proc_openを使用してプロセスを実行しようとしています。プロセスのI/Oはパイプで処理されます!!
たまたま、開いた「cプログラム」が動かなくなってしまうことがあり、プロセスを強制的にシャットダウンするmax_time_limitチェックを追加しました。コールバック関数(つまり、onExit)を追加して(「call_user_function」を使用)、「プロセスが終了する」たびに有効な方法で、または強制的に情報を処理します。
「終了」機能で、I/Oパイプを閉じています
プロセスに有効な終了があった場合、上記は完全に正常に機能します。ただし、プロセスを強制的に強制終了した場合は、proc_terminateを呼び出して強制終了しました。プロセスの終了も先に進んでI/Oパイプを閉じることを理解していますが、問題は、コールバックのために、「onExit」関数プロセスが常に呼び出されることです(これが私が望む方法です。 。さらに処理を行う必要があるため)。さて、この場合、パイプを閉じようとすると、次のエラーが発生します。
「ftell」を使用してパイプが有効かどうかを確認しようとしましたが、それもエラーになりました。パイプがすでに閉じられているかどうかを確認するにはどうすればよいですか?
php - PHP stream_select が機能しない
Windows 7 と php 5 を使用しています。
proc_open によるプロセスの実行に問題があり、タイムアウトを確認します。stream_select を使用して、次のコードでタイムアウトを確認しました。
これは、テストに使用した C++ コードです。
そのコードでは、出力はまったくありませんが、stream_select は 1 秒待たずに 1 を返します。
どうすればこれを修正できますか?
php - バックグラウンドでphpファイルを実行する方法
重複の可能性:
長時間実行される php スクリプトを管理する最良の方法は?
大きなメーリング リストを作成する必要があります。すべてが完全に機能しますが、フォーム ページを送信すると、すべてのメールが送信されるまで読み込まれます。したがって、このメール送信スクリプトをバックグラウンドで実行し、スクリプトがバックグラウンドで実行されていることをユーザーに通知します。Ajaxは使えません。
私は.. proc_open、exec、shell_exec ..のようなものが欲しい..
php - proc_openで開かれたプロセスへの複数の書き込み
だから私はプロセスを開きます$process = proc_open("my_process", $descriptors, $pipes);
次に、を使用してプロセスのstdinに書き込みますfwrite($pipes[0], "some_command");
fclose($pipes[0]);
次に、を使用してパイプstdoutから読み取る前に、を使用してパイプを閉じる必要があり$output = stream_get_contents($pipes[1]);
ます。パイプを閉じないと、phpスクリプトがこの呼び出しでハングします。
しかし、stdoutからの出力を受け取ったら、プロセスに別のコマンドを送信したい場合はどうなりますか... stdinパイプが閉じているため、送信する方法がありません。では、どういうわけか別のコマンドをプロセスに送信することは可能ですか?
php - phpexecの提案/代替案
PHPコマンドの実行とベストプラクティスに関して、誰かが私にいくつかの指針を教えてもらえますか?
現在、いくつかのネットバックアップデータを解析しようとしていますが、システムコールが返す大量のデータに関連する問題が発生しています。取得するデータの量を減らすために、私は次のようなことをしています。
受信するデータの量を制限するためにawkを使用しています。これがないと、約150 MBのデータを受信することになり、それを使用すると、はるかに管理しやすい約800kのデータを取得できます。
あなたはawkのたわごとが厄介だと私に言う必要はありません-私はすでにそれを知っています...しかし、自分自身(そして私のコード)を改善するために、誰かが代替案を提案できますか?
私は次のようなことを考えてproc_open
いましたが、それが何らかの利益をもたらすかどうかは本当にわかりません。
php - PHP-proc_get_status'running' javaw実行可能ファイルがまだ実行中の場合、falseを返します
私はこれを使用して無限ループのJavaファイルでjavawを実行しています:
への最初の呼び出しでproc_get_status
、running
属性はtrueを返します。への2回目の呼び出し(1秒後)でproc_get_status
、falserunning
を返します。ただし、アプリケーションjavaw.exeはまだ実行中です(whileループを呼び出して、最終的にタイムアウトします)。proc_get_status
私の目標は、タイムアウトの期限が切れた後にプログラムをタスクキルすることです。ここで同様の質問を参照してください。Win7 64ビット、PHP5.3で実行しています
上のVarダンプ$status
:(注;私は適用しようとしましstream_set_blocking($pipes[0], 0) ;
た、同じ問題)
タイムアウトループに入る前:
最初の反復/sleep(1)後:
テスト後、$status['pid']はWindowsのリソースモニターでのjavaw.exeのpidとは異なるようです。
php - proc_open で同時に 2 つのプロセスを生成する方法は?
一度に 2 つの notepad.exe プロセスを作成したいだけですが、最初の notepad.exe が強制終了されるまで、2 番目のプロセスは作成されませんでした。一度にマルチプロセスを作成するには?
php - PHPでプロセスのパイプを接続する
proc_open で作成された 1 つのプロセスの出力を、proc_open (php) で作成された別のプロセスにパイプしたいと考えています。例えば。bash では、次のことができます。
戻りコード、パイプなどを制御するために、(shell_exec の代わりに) proc_open を使用して php でこれをシミュレートしたいと思います。したがって、次のようなものが必要です。
「|」をシミュレートする方法を誰かが知っていますか つまり、cat-process の 2 番目の記述子を sort-process の最初の記述子に接続しますか? どんな助けでも大歓迎です!ただし、終了コードを確認してエラーをログに記録できるようにしたいので、shell_exec にリダイレクトしないでください :)。
編集:
私の仕事に必要なビジネスソリューションは次のとおりです。
これは基本的にOSが行うことですが、私はそのためのカーネル/posixを持っているので、私自身のパイプ管理はしたくありません。正直に言うと、それは1976年ではありません:)