gpt4 book ai didi

c - 根据条件在C中异步运行外部程序

转载 作者:行者123 更新时间:2023-11-30 17:09:37 25 4
gpt4 key购买 nike

我认为到目前为止我采取了很好的方法。在此代码中,我希望条件导致 aflag 设置为 1 或 2。然后根据数字启动相应的程序。因此,如果 aflag 为 1,则需要在后台启动 /path/to/app1 并且该程序需要继续。如果 aflag 为 2,则需要启动 /path/to/app2

我可以确定该进程是否是 fork() 的子进程,但我不想在主函数中执行 fork() 因为我不想想要在启动程序之前执行后台进程。

如果可能的话,我还想避免使用 pthread 和系统函数,因为我正在寻找资源消耗最少的答案,人们说 fork() + exec() 是要走的路。

如何确定 main 进程是否为子进程?我希望它能够知道要运行的程序。

#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();
}
}

最佳答案

希望下面的代码能给您一些想法。显然,这只是带有无限循环的示例代码。真实代码可能会让父级接受输入来设置 aflag 值。但它说明了父线程如何 fork 出新进程以及新子进程如何决定运行哪个应用程序。父进程返回到下一个fork操作。

static char *app1="/path/to/app1";
static char *app2="/path/to/app2";

int main(void)
{
pid_t pid;
int aflag = SOME_VALUE_OBTAINED_FROM_SOMEWHERE;
const char *app = NULL;

while (1) {
pid = fork();
if (pid == -1) {
printf("fork error\n");
} else if (pid > 0) {
/* This is child code. */
switch (aflag) {
case 0:
app = app1;
break;
case 1:
app = app2;
break;
}
if (app) {
execl(app, NULL);
/* execl does not return on success */
printf("execl error\n");
}
} else {
/*
* This is the parent code - no exec. Just do
* something else.
*/
}
}

}

关于c - 根据条件在C中异步运行外部程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33206412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com