守护程序进程挂载失败

时间:2015-11-16 12:40:47

标签: linux process clearcase daemon

我正在编写一个Linux发行版C程序。当守护进程从客户端读取MSG时,它将分叉子进程,然后将“NFS”目录挂载到本地主机并在此NFS目录上执行计算任务。
然而,这是NFS是IBM ClearCase动态视图,它被称为“MVFS”而不是“NFS” 因此,我必须执行“cleartool setview xxyyzz”来安装此视图 但我尝试了几种方法,例如fork() + execvpsystem(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”始终返回“/”路径。

你能告诉我如何完成我的课程吗?

1 个答案:

答案 0 :(得分:0)

请勿使用cleartool setviewspawns a subshell,它不会从您的同一位看到。

只需使用full dynamic view path

/view/myDynView
# under which you would see:
/view/myDynView/vobs/MyVob

您需要的只是view to be started