2013-04-17 20 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