<二>、进程-fork

来源:互联网 发布:新浪数据库 a股票种 编辑:程序博客网 时间:2024/06/03 01:24
 

《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

*************************************************************

 


 

 

原创粉丝点击