2

ユーザーがサーバー上で新しいプロセスを作成し、サーバーと対話できるようにする Web サイトに取り組んでいます。たとえば、ユーザーが C コードを実行したいとします。

#include<sdio.h>

int main()
{
    int a;
    scanf("%d", &a);
    printf("%d", a);
}

サーバーでは、プロセスを作成し、プロセスの実行が停止するまでそのプロセスを維持します。のような関数を使用する場合exec、私たちは何もできませんscanf。を使用する場合proc_open、子プロセスを存続させることはできません..または可能ですが、方法がわかりません..

手順は、ユーザーが命令を送信する -> サーバーが命令を実行するための新しいプロセスを作成する -> 命令を実行するときに、サーバーstdoutが Web ページに送信しstdin、ユーザーの入力から取得する -> プロセスが実行を停止する..

4

1 に答える 1

0

私は、exec 呼び出しで「&」を使用してバックグラウンド PHP CLI スクリプトを起動する特注のチップとピンのソリューションを用意しました。フロントエンドとバックグラウンド スクリプトは、2 つの ascii ファイルを介して文字列を渡すだけで通信しました。これは大雑把ですが効果的でした。明らかに、両方のプロセスが受信ファイルをチェック/読み取り、何をすべきか (たとえば、バックグラウンド プロセスで C++ コードを実行する) を決定し、必要に応じて出力ファイルに書き込むことで応答する必要がありました。これらの 3 つの手順をループに入れると、大まかなリスナー/デーモンができあがります。これは、承認サービスへの通信チャネルであるソケットをバックグラウンド ジョブが同時にリッスンする必要があるため、さらに複雑でした。これは単一ユーザーのシナリオでしたが、一意のファイルを使用するか、キー付きデータベース テーブルに書き込むことで、マルチユーザーに適応させることができました。

呼び出しは次のようになります。

exec ("php mydaemon.php 2>&1>/dev/null &");

私は Linux サーバーを想定しています。したがって、バックグラウンドで実行するための Linux の「&」ディレクティブです。2>&1>/dev/null は、stdout と stderr を抑制するだけです。

Windows でどのように解決するのかよくわかりませんが、Wscript または VBscript に相当するものが必要ですか??

于 2013-06-28T22:35:19.730 に答える