进程使用fork运行xterm实例时出错

时间:2014-02-16 09:14:59

标签: c linux fork xterm

我被赋予了分配n个进程的任务。

对于每个进程,它必须启动/ bin / xterm

的实例

我完成了生成n个进程并打开xterm实例的部分。

我在尝试运行程序时得到了这个输出。 (粗体错误)

  

要开启的流程数量为1.

     

儿童(1):3457

     

/ bin / xterm:Xt错误:无法打开显示:

     

/ bin / xterm:未设置DISPLAY

我的代码如下。

我尝试谷歌搜索错误,但到目前为止我没有运气。

任何解决方案?

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
    int num = atoi(argv[1]);
    printf("Number of process to open is %d.\n", num);
    int pid;
    int i;

    for(i = 0; i < num; i++)
    {
        pid = fork();
        if(pid < 0) {
            printf("Error");
            exit(1);
        } else if (pid == 0) {
            printf("Child (%d): %d\n", i + 1, getpid());
            char * const argv[] = {"/bin/xterm", NULL};
            char * const envp[] = {NULL};
            int rc = execve ("/bin/xterm", argv, envp);
            exit(0); 
        } else  {
            wait(NULL);
        }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您粘贴的输出中解释了错误:

 /bin/xterm: DISPLAY is not set

您需要适当地设置DISPLAY。否则,它将无法知道将其显示放在何处。

另外,在创建每个孩子后,你真的想要wait吗?

答案 1 :(得分:0)

这个小改变的代码在我的系统上运行得非常好:

    #include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main(int argc, char *argv[])
{
    int num = atoi(argv[1]);
    printf("Number of process to open is %d.\n", num);
    int pid;
    int i;

    for(i = 0; i < num; i++)
    {
        pid = fork();
        if(pid < 0) {
            printf("Error");
            exit(1);
        } else if (pid == 0) {
      //printf("Child (%d): %d\n", i + 1, getpid());
            //char * const argv[] = {"/bin/xterm", NULL};
            //char * const envp[] = {NULL};
            execl("/usr/bin/xterm", "/usr/bin/xterm", NULL);
            //exit(0); 
        }else  {
            wait(NULL);
        }
    }
    return 0;
}