我正在从我的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);
答案 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函数。