2013-04-17 21 views
0

以下给出的代码(process1)与actaul scanrio类似。我使用process1的进程ID从另一个应用程序更新global_data过程在后台执行时会停止

由于getchar()在过程1中,当运行此过程类似,则显示

$ ./process1 &

以下消息。

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

我不能删除getchar()。所以如何运行这两个应用程序。

注意:尝试telnet/ssh选项。如果我通过telnet连接,那么只有该telnet窗口处于活动状态。在最大限度内,我只能通过一个终端工作。

#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 & 

这种模式避免停止的过程,因为标准输入从文件中取出。输入文件必须具有足够的数据给进程请求。

+0

在上面的例子中,我对于所需的按键次数没有任何了解。 – Jeyaram

+0

既不是上限?如果文件具有比需要更多的数据 –

+0

+1,则用于提示文件输入无关紧要。但是在process1(实际)中更多打印的Bcos,我没有得到终端来运行修改process1的全局数据的process2。 – Jeyaram

1

一个后台进程,试图从标准输入读取被暂停(显然)。因此,首先,弄清楚为什么你想从标准输入读取 - 这可以避免 - 通过采取命令行参数 - 如果是的话,那么你应该这样做。 在这种情况下,您从代码中看起来好像要等到volatile变量更新 - 您不想连续检查。如果是这种情况,请使用sleep

否则,您必须通过

  • 标准输入重定向从文件到解决这个问题。

+0

getchar()在我的实际应用程序中用于交互式执行。 – Jeyaram