从c函数执行系统命令并将控制权恢复回main

时间:2015-02-02 08:01:38

标签: c

我正在从我的c函数执行LSF和Perl文件(它们具有与测试用例自动化相关的特定功能)。我想执行system()命令,并且不想等到文件的执行过程完成,而是我希望控件回退到主c程序继续执行程序并离开任务由linux执行引擎执行。有人帮助我。

我附上了以下代码:

sprintf(String, "/home/teproj/nxp90884/CellDesign/AN_DFIIToCdl.lsf %s %s %s %s %s", res, cel, tmp, frc, upd);
 system(String);

3 个答案:

答案 0 :(得分:2)

由于system()分支shell运行命令行,您只需将一个&符号(&)附加到命令行,以使shell在后台运行命令。

快速而肮脏的方法。干净的方法当然是使用fork()exec()来自行进行流程管理。

答案 1 :(得分:1)

您可以fork在子流程中调用execve系统调用,继续执行父流程中的原始作业(反之亦然)

答案 2 :(得分:0)

要在后台运行任务,您需要启动一个新线程。 fork()是一位朋友,另一位是pthread家庭。

使用fork的示例:

process = fork();

if (process < 0){
   //fork error
   perror("fork");
   exit(EXIT_FAILURE);
}
if (process == 0){
    // Child process. You can either use one of the exec functions:

    execl("/home/teproj/nxp90884/CellDesign/AN_DFIIToCdl.lsf" "AN_DFIIToCdl.lsf", res, cel, tmp,frc,upd, NULL);

    // or system + exit.
    sprintf(String, "c %s %s %s %s %s", res, cel, tmp, frc, upd);
    system(String);
    exit(0); // to terminate the child.
} else {
  // Main thread. Continue executing
}

最佳做法是在这种情况下选择一个exec函数。