我覺得我是在一個很好的方法,到目前爲止用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(或者錯誤中爲負值) –