fork後好像會先執行child process,再執行parent process。
在uClinux裡,fork不行用,要用vfork,但是vfork和fork不一樣,
vfork的child和parent使用相同的memory space,所以child process不可以直接結束。
要用exit()或是呼叫exec??( )執行其他外部程式來結束自己。
如果不用exit而結束, 會有"Illegal instruction"或是'SIGSEGV"的error message。
另一點
vfork不能像fork一樣,
以下面的fork一個child process作daemon的code來看
int main(int argc, char *argv[])把fork改為vfork後雖然parent有作exit(),但是因為和vfork的parent,child使用相同的
{
char c;
int _argc = 0;
char *_argv[3];
pid_t pid;
if ((pid = fork()) <>
memory space,所以直到child也exit()或exec??()前,parent都無法結束。
所以以vfork來作上面的例子
int execed = 0;
int main(int argc, char *argv[])
{
char c;
int _argc = 0;
char *_argv[3];
pid_t pid;
while ((c=getopt(argc, argv, "D")) > 0) {
switch(c) {
case 'D':
execed = 1;
break;
default:
fprintf(stderr, "You probably don't want to pass "
"options to this\n");
exit(1);
}
}
if (!execed) {
if ((pid = vfork()) <>
沒有留言:
張貼留言