2013-04-17 4 views
0

Ниже приведенный код (process1) похож на actaul scanrio. Im обновляет global_data из другого приложения, используя идентификатор процесса process1.Процесс остановлен, если выполняется в фоновом режиме

Из getchar() в Process1, когда я запускаю этот процесс, как, отображается

$ ./process1 &

следующее сообщение.

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

Я не могу удалить getchar(). поэтому как запустить оба приложения.

Примечание: параметры telnet/ssh пытались. Если я подключусь через telnet, тогда будет открыто только это окно telnet. При max я могу работать только через один терминал.

#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; 
} 
+0

Как вы изменяете 'global_data', если вы не используете разделяемую память? –

+0

с помощью 'ptrace' Я могу прочитать раздел данных другого процесса. – Jeyaram

+0

Почему бы не использовать общую память? Это намного проще, я бы сказал (и фактически разработал для этого ...) –

ответ

1

Создайте текстовый файл с данными, который вы хотите ввести в процесс, и перенаправить ввод:

$ ./process1 < file_with_data & 

Этот режим избежать остановки процесса, так как STDIN будет взят из файла. Входной файл должен иметь достаточное количество данных для запросов процесса.

+0

В приведенном выше примере я не имею никакого представления о необходимости нажатия клавиш. – Jeyaram

+0

ни верхний предел? Не имеет значения, имеет ли файл больше данных, чем необходимо –

+0

+1 для предложения ввода из файла. Но Bcos больше печатает в process1 (фактический), Im не получает терминал для запуска process2, который изменяет глобальные данные process1. – Jeyaram

1

Фоновый процесс, который пытается прочитать из stdin, приостанавливается (очевидно). Итак, прежде всего, выясните, почему вы хотите читать из stdin - этого можно избежать - скажем, принимая аргументы командной строки - если да, то вы должны это сделать. В этом случае из вашего кода, похоже, вы хотите дождаться обновления изменчивой переменной - вы не хотите постоянно проверять. Если это так, используйте sleep.

В противном случае, вы должны работать вокруг этого

  • перенаправляющего стандартного ввода из файла.

или

+0

getchar() предоставляется для интерактивного выполнения в моем фактическом приложении. – Jeyaram