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

C 进程使用fork运行xterm实例时出错,c,linux,fork,xterm,C,Linux,Fork,Xterm,我被赋予了分叉n个进程的任务 对于每个进程,它必须启动一个/bin/xterm实例 我已经完成了生成n个进程和打开xterm实例的部分 我试着运行程序时得到了这个输出。(粗体错误) 要打开的进程数为1 儿童(1):3457 /bin/xterm:Xt错误:无法打开显示: /bin/xterm:未设置显示 我的代码如下 我试着用谷歌搜索错误,但到目前为止我没有运气 有什么解决办法吗 #include<stdio.h> #include<stdlib.h> int main

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

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

我已经完成了生成n个进程和打开xterm实例的部分

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

要打开的进程数为1

儿童(1):3457

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

/bin/xterm:未设置显示

我的代码如下

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

有什么解决办法吗

#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;
}
#包括
#包括
int main(int argc,char*argv[])
{
int num=atoi(argv[1]);
printf(“要打开的进程数为%d.\n”,num);
int-pid;
int i;
对于(i=0;i
在粘贴的输出中解释了错误:

 /bin/xterm: DISPLAY is not set
您需要适当地设置
显示
。否则,它将无法知道将其显示器放置在何处


另外,您真的想在创建每个子项后等待它吗?

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

    #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;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
int num=atoi(argv[1]);
printf(“要打开的进程数为%d.\n”,num);
int-pid;
int i;
对于(i=0;i
您正在不必要地等待每个孩子终止!为什么要在argv[]为常量时将其赋值?@Nullpointer感谢您的提示。我将删除等待(空)…:)顺便说一句,可以用execve来做吗?我可以问一下,根据我上面的代码,你是如何用execve来做的吗?只是好奇,我该如何正确设置显示?这取决于你想显示到哪里。您需要将其设置为要输出到的
xterm
显示器的名称/位置。使用
setenv