《fork.c》
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void )
{
pid_t ret;
printf("hello!\n");
ret = fork();
printf("Have forked!\n");
if (ret < 0 ) {
perror("fork");
exit(1);
}
if (ret == 0 ) { //瀛愯繘绋?// printf("In child process, pid=%d, ppid=%d\n", getpid(), getppid());
execl("/bin/ls", "ls", "-al", NULL);
// execlp("ls", "ls", "-al", NULL);
exit(1);
}
sleep(5);
printf("In parent process, pid =%d, child pid=%d\n", getpid(), ret);
return 0;
}
结果:
hello!
Have forked!
Have forked!
total 136
drwxrwxrwx 2 nobody nogroup 4096 2011-12-07 18:39 .
drwxrwxrwx 9 lsb lsb 4096 2011-12-07 18:00 ..
-rwxr-xr-x 1 lsb lsb 7327 2011-12-07 18:39 atexit
-rwxr--r-- 1 nobody nogroup 380 2011-07-20 23:58 atexit.c
-rwxr-xr-x 1 lsb lsb 7861 2011-12-07 02:33 c
-rwxr--r-- 1 nobody nogroup 3527 2011-12-07 02:33 c.c
-rwxr-xr-x 1 lsb lsb 7350 2011-12-07 18:06 exec
-rwxr--r-- 1 nobody nogroup 601 2011-07-20 23:47 exec.c
-rwxr-xr-x 1 lsb lsb 7202 2011-12-07 18:04 exit
-rwxr-xr-x 1 lsb lsb 7204 2011-12-07 18:15 _exit
-rwxr--r-- 1 lsb lsb 311 2011-12-07 18:15 _exit.c
-rwxr--r-- 1 lsb lsb 194 2011-12-07 18:04 exit.c
-rwxrwxrwx 1 root root 7350 2011-12-07 02:20 fork
-rwxr-xr-x 1 lsb lsb 7353 2011-12-07 18:23 fork1
-rwxr--r-- 1 nobody nogroup 787 2011-07-20 20:52 fork1.c
-rwxrwxrwx 1 nobody nogroup 502 2011-07-20 23:40 fork.c
prw-r--r-- 1 lsb lsb 0 2011-12-07 02:30 in1
prw-r--r-- 1 lsb lsb 0 2011-12-07 02:30 in2
-rwxr-xr-x 1 lsb lsb 7508 2011-12-07 02:26 pipe
-rwxrwxrwx 1 nobody nogroup 1378 2008-12-19 03:17 pipe.c
-rwxr-xr-x 1 lsb lsb 7528 2011-12-07 02:30 pipe_select
-rwxr--r-- 1 nobody nogroup 3029 2008-12-19 03:17 pipe_select.c
-rwxr-xr-x 1 lsb lsb 12180 2011-12-07 02:35 s
-rwxr--r-- 1 nobody nogroup 4865 2011-12-07 02:32 s.c
停5秒
In parent process, pid =3585, child pid=3586
************************************************************************
《fork1.c》
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void)
{ pid_t result;
int a = 5;
printf ("a=%d\n", a);
result = fork ();
/*调用fork函数,其返回值为result */
printf ("1111111\n");
/*通过result的值来判断fork函数的返回情况,首先进行出错处理*/
if (result == -1) {
perror ("fork");
exit (1); }
else if (result == 0) { /*返回值为0代表子进程 */
sleep (5);
printf ("The return value is %d\nIn child process!!\nMy PID is %d, parent ID is: %d\n", result, getpid (),getppid ());
a += 1;
} else {
/*返回值大于0代表父进程 */
printf ("The return value is %d\n In father process!!\nMy PID is %d, Child Id is %d\n", result, getpid (),result);
sleep (10);
}
printf ("xxxxx a=%d\n", a);
}
结果:
a=5
1111111
The return value is 3616
In father process!!
My PID is 3615, Child Id is 3616
1111111
停5秒
The return value is 0
In child process!!
My PID is 3616, parent ID is: 3615
xxxxx a=6
停5秒
xxxxx a=5
**********************************************
《fork_v1.c》
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main (void )
{
pid_t ret;
printf("hello!\n");
ret = fork();
printf("Have forked!\n");
if (ret < 0 ) {
perror("fork");
exit(1);
}
if (ret == 0 ) { //子进程
// printf("In child process, pid=%d, ppid=%d\n", getpid(), getppid());
execl("/bin/ls", "ls", "-al", NULL);
exit(1);
}
sleep(5);
printf("In parent process, pid =%d, child pid=%d\n", getpid(), ret);
return 0;
}
结果:
hello!
Have forked!
Have forked!
total 148
drwxrwxrwx 2 nobody nogroup 4096 2011-12-07 18:53 .
drwxrwxrwx 9 lsb lsb 4096 2011-12-07 18:00 ..
-rwxr-xr-x 1 lsb lsb 7327 2011-12-07 18:39 atexit
-rwxr--r-- 1 nobody nogroup 380 2011-07-20 23:58 atexit.c
-rwxr-xr-x 1 lsb lsb 7861 2011-12-07 02:33 c
-rwxr--r-- 1 nobody nogroup 3527 2011-12-07 02:33 c.c
-rwxr-xr-x 1 lsb lsb 7350 2011-12-07 18:06 exec
-rwxr--r-- 1 nobody nogroup 601 2011-07-20 23:47 exec.c
-rwxr-xr-x 1 lsb lsb 7202 2011-12-07 18:04 exit
-rwxr-xr-x 1 lsb lsb 7204 2011-12-07 18:15 _exit
-rwxr--r-- 1 lsb lsb 311 2011-12-07 18:15 _exit.c
-rwxr--r-- 1 lsb lsb 194 2011-12-07 18:04 exit.c
-rwxrwxrwx 1 root root 7350 2011-12-07 02:20 fork
-rwxr-xr-x 1 lsb lsb 7353 2011-12-07 18:23 fork1
-rwxr--r-- 1 nobody nogroup 787 2011-07-20 20:52 fork1.c
-rwxrwxrwx 1 nobody nogroup 502 2011-07-20 23:40 fork.c
-rwxr-xr-x 1 lsb lsb 7353 2011-12-07 18:53 fork_v1
-rwxr--r-- 1 nobody nogroup 461 2011-07-20 23:37 fork_v1.c
prw-r--r-- 1 lsb lsb 0 2011-12-07 02:30 in1
prw-r--r-- 1 lsb lsb 0 2011-12-07 02:30 in2
-rwxr-xr-x 1 lsb lsb 7508 2011-12-07 02:26 pipe
-rwxrwxrwx 1 nobody nogroup 1378 2008-12-19 03:17 pipe.c
-rwxr-xr-x 1 lsb lsb 7528 2011-12-07 02:30 pipe_select
-rwxr--r-- 1 nobody nogroup 3029 2008-12-19 03:17 pipe_select.c
-rwxr-xr-x 1 lsb lsb 12180 2011-12-07 02:35 s
-rwxr--r-- 1 nobody nogroup 4865 2011-12-07 02:32 s.c
停5秒
In parent process, pid =3699, child pid=3700
*************************************************************