我觉得我是在一个很好的方法,到目前为止用C异步运行外部程序。在该代码中,我希望它其中条件导致AFLAG被设置为1或2。然后基于该号码,相应的程序将被启动。因此,如果AFLAG为1,则需要/path/to/app1
在后台启动,并将该软件需要继续。如果aflag是2则需要启动/path/to/app2
。根据病情
我可以确定过程是否是fork()
的孩子,但我不想在主函数中执行fork()
,因为我不想在启动程序之前执行后台进程。
如果可能的话,我还想避免使用pthread和系统函数,因为我在寻找资源密集度最低的答案,并且人们说fork()
+ exec()
是要走的路。
如何确定是否在主要过程是一个孩子?我希望它能够知道要运行的程序。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
static char *app1="/path/to/app1";
static char *app2="/path/to/app2";
static char *app;
int otherfunction(){
int aflag=0;
//do something (will fill in later)
if (aflag==1){
//run app 1
app=app1;
fork();
}
if (aflag==2){
//run app 2
app=app2;
fork();
}
}
int main(){
int imachild=???;
if (imachild==1){
execl(app,NULL);
return 0;
}
while(1){
otherfunction();
}
}
“我不希望在我的主函数来执行fork()的,因为我不希望之前,它是时间来启动程序执行的后台进程。”。很好,当你想启动程序时调用'fork'。然后根据返回值调用'execl'(child)或不调用'execl'(parent)。 – kaylum
所以我实际上可以将fork的返回值用于孩子吗?怎么样?我想'fork()的'启动子,并开始在我的计划执行'主()'函数的副本,它返回一个值之前。 – Mike
@Mike,'fork'滋生关闭其中*继续下一条语句*一个孩子。它不在'main'中开始。不同之处在于'fork'在孩子中返回零,或者孩子在父代中的PID(或者错误中为负值) –