0

以下のコード (process1) は actaul scanrio に似ています。global_dataプロセス1のプロセスIDを使用して、別のアプリケーションから更新しています。

プロセス1のため、getchar()このプロセスを次のように実行すると、

$ ./process1 &

以下のメッセージが表示されます。

[1]+ Stopped (tty input) ./process1

削除できませんgetchar()。両方のアプリケーションを実行する方法。

注: telnet/ssh オプションを試しました。telnet で接続すると、その telnet ウィンドウだけがアクティブになります。最大で、1 つの端末のみで作業できます。

#include <stdio.h>    
volatile int global_data = 0;

int main()
{

FILE *fp = NULL;
int data = 0;    
printf("\n Address of global_data:%x \n", &global_data);

        while(1)
        {
              if(global_data == 0)
                {
                getchar();
                continue;
                }
                else if(global_data == 2)
                {
                        fp = fopen("JeyTest.txt", "w+");
                        if(fp == NULL)
                        {
                           printf("\n Error in file creation..... \n");
                                break;
                        }

                        for(data = 0; data < 1000; data++)
                        {
                            fprintf(fp, "%d\n", data);
                        }

                        fclose(fp);
                        break;
                }
        }    

return 0;
}
4

2 に答える 2

0

プロセスに導入するデータを含むテキスト ファイルを作成し、入力をリダイレクトします。

$ ./process1 < file_with_data &

このモードでは、stdin がファイルから取得されるため、プロセスの停止が回避されます。入力ファイルには、要求を処理するのに十分なデータが必要です。

于 2013-04-17T06:36:55.510 に答える
0

stdin から読み取ろうとするバックグラウンド プロセスは中断されます (明らかに)。まず第一に、なぜ stdin から読み取りたいのかを理解してください。これを避けることができますか?たとえば、コマンド ライン引数を取得することで回避できますか?そうであれば、そうする必要があります。この場合、あなたのコードからは、volatile 変数が更新されるまで待ちたいように見えます - 継続的にチェックしたくありません。このような場合は、 を使用してsleepください。

それ以外の場合は、次の方法でこれを回避する必要があります

  • ファイルから stdin をリダイレクトします。

また

于 2013-04-17T06:30:36.447 に答える