【发布时间】:2013-08-30 16:25:17
【问题描述】:
我正在尝试创建一个进程 fork 并在子进程中运行 execve,以便它将打开一个新的终端窗口并在那里执行自定义命令。
我要执行的程序是gestore
这些是我传递给execve的参数:
char * argv_exec[5];
argv_exec[0]="/usr/bin/xfce4-terminal";
argv_exec[1]="--geometry";
argv_exec[2]="480x320";
argv_exec[3]="-x";
argv_exec[4]="./gestore"; // the program I want to execute in new window
argv_exec[5]=NULL;
char sess_m[80];
strcat(sess_m,"SESSION_MANAGER=");
strcat(sess_m,getenv("SESSION_MANAGER"));
char * envp[3];
envp[0]="DISPLAY=:0.0";
envp[1]=sess_m;
envp[2]=NULL;
我在这里打电话给execve:
if(pid_tv==0)
if(execve(argv_exec[0],argv_exec,&envp)==-1) {...}
但我不断收到Session manager variable not defined。
任何人对为什么这不起作用或我怎样才能做得更好有什么建议?
【问题讨论】:
-
你能试试
env | grep SESSION_MANAGER | wc -c吗? :) 在我的机器上是 92。所以,比你默认的sess_m缓冲区大一点……猜猜这可能是个问题。 -
argv_exec 的大小应该是 6,而不是 5。第一个 strcat 应该是 strcpy。而不是 &envp 调用 execve,只是 envp。
-
感谢您指出“错别字”,即使在这种情况下我认为问题出在其他地方