我被赋予了分配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;
}
答案 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;
}