如果在后台执行,则进程停止

时间:2013-04-17 06:20:43

标签: c linux ptrace

下面给出的代码(process1)类似于actaul scanrio。我正在使用process1的进程ID从另一个应用程序更新global_data

由于进程1中的getchar(),当我运行此过程时,

$ ./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;
}

2 个答案:

答案 0 :(得分:1)

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

否则,你必须通过

来解决这个问题
  • 从文件重定向stdin。

答案 1 :(得分:1)

创建一个文本文件,其中包含您要引入流程的数据,并重定向输入:

$ ./process1 < file_with_data &

此模式避免停止进程,因为stdin将从文件中获取。输入文件必须有足够的数据来处理流程。