守护进程挂载失败
daemon process mount failed
我正在编写 Linux 分发 C 程序。当守护进程从客户端读取 MSG 时,它会派生一个子进程,然后挂载一个 "NFS" 目录到本地主机,并在这个 NFS 目录上执行计算任务。
然而,这是 NFS 是 IBM ClearCase 动态视图,它被称为 "MVFS" 而不是 "NFS"。
所以我必须执行“cleartool setview xxyyzz
”来挂载这个视图。
但是我尝试了fork() + execvp
、system(shell)
等几种方法,都没有成功。
下面是代码和 shell:
void my_system();
int main(int argc, char** argv)
{
pid_t pid=fork();
if(pid!=0) exit(0);
if(setsid()==-1)
{
printf("setsid failed.");
exit(-1);
}
umask(0);
chdir("/tmp");
int i;
for(i=0;i<3;i++)
close(i);
FILE* logfd=fopen("/tmp/ccdcc.log","a+");
dup2(fileno(logfd),STDOUT_FILENO);
dup2(fileno(logfd),STDERR_FILENO);
fclose(logfd);
my_system(); //method1
system("/tmp/ccdccshell"); //method2
sleep(SEVERALTIME);
}
void my_system()
{
pid_t pid=fork();
if(pid!=0) return;
char *arg1[]={"cleartool","setview","zzzzzz"};
char *arg2[]={"cd","/proj/layer/mak"};
char *arg3[]={"mycmd"};
execvp("cleartool",arg1);
execvp("cd",arg2);
execvp("mycmd",NULL);
}
xxx@yyy> cat /tmp/ccdccshell
#!/bin/sh
#this command will mount a dynamic view and source some profile.
cleartool setview zzzzzz
#this path is under the mounted path
cd /proj/layer/mak
#to test where we are
pwd
#call my prog.
mycmd
我每次都失败了“cleartool....
”。没有安装视图。
“pwd
”总是 return 路径“/
”。
你能告诉我如何完成我的程序吗?
不要使用 cleartool setview
: it spawns a subshell,这在您的 sameon 中是看不到的。
只需使用 :
/view/myDynView
# under which you would see:
/view/myDynView/vobs/MyVob
您只需要view to be started。
我正在编写 Linux 分发 C 程序。当守护进程从客户端读取 MSG 时,它会派生一个子进程,然后挂载一个 "NFS" 目录到本地主机,并在这个 NFS 目录上执行计算任务。
然而,这是 NFS 是 IBM ClearCase 动态视图,它被称为 "MVFS" 而不是 "NFS"。
所以我必须执行“cleartool setview xxyyzz
”来挂载这个视图。
但是我尝试了fork() + execvp
、system(shell)
等几种方法,都没有成功。
下面是代码和 shell:
void my_system();
int main(int argc, char** argv)
{
pid_t pid=fork();
if(pid!=0) exit(0);
if(setsid()==-1)
{
printf("setsid failed.");
exit(-1);
}
umask(0);
chdir("/tmp");
int i;
for(i=0;i<3;i++)
close(i);
FILE* logfd=fopen("/tmp/ccdcc.log","a+");
dup2(fileno(logfd),STDOUT_FILENO);
dup2(fileno(logfd),STDERR_FILENO);
fclose(logfd);
my_system(); //method1
system("/tmp/ccdccshell"); //method2
sleep(SEVERALTIME);
}
void my_system()
{
pid_t pid=fork();
if(pid!=0) return;
char *arg1[]={"cleartool","setview","zzzzzz"};
char *arg2[]={"cd","/proj/layer/mak"};
char *arg3[]={"mycmd"};
execvp("cleartool",arg1);
execvp("cd",arg2);
execvp("mycmd",NULL);
}
xxx@yyy> cat /tmp/ccdccshell
#!/bin/sh
#this command will mount a dynamic view and source some profile.
cleartool setview zzzzzz
#this path is under the mounted path
cd /proj/layer/mak
#to test where we are
pwd
#call my prog.
mycmd
我每次都失败了“cleartool....
”。没有安装视图。
“pwd
”总是 return 路径“/
”。
你能告诉我如何完成我的程序吗?
不要使用 cleartool setview
: it spawns a subshell,这在您的 sameon 中是看不到的。
只需使用
/view/myDynView
# under which you would see:
/view/myDynView/vobs/MyVob
您只需要view to be started。