进程的控制

1进程的创建

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
        int p1,p2;
        while((p1=fork())==-1) exit(1);//创建子进程P1
        if(p1==0)
        {
                putchar('b');
                putchar('\n');
        }
        else
        {
                while((p2=fork())==-1) exit(1);//创建子进程P2
                  if(p2==0)

                {
                    putchar('c');
                    putchar('\n');
                }
                else//父进程
                {
                    putchar('a');
                    putchar('\n');
                }
        }
        return 0;
}

 

使用gdb调试过程:

qrx@qrx-pc:~/osexp/sy1$ gcc -g bz1.c -o bz1
qrx@qrx-pc:~/osexp/sy1$ gdb bz1 -q 
Reading symbols from bz1...done. 
(gdb) l 
1    #include<unistd.h> 
2    #include<stdio.h> 
3    #include<stdlib.h> 
4    int main() 
5    { 
6            int p1,p2; 
7            while((p1=fork())==-1) exit(1); 
8            if(p1==0) 
9                    printf("b\n"); 
10            else 
(gdb) break 5 
Breakpoint 1 at 0x4005ce: file bz1.c, line 5. 
(gdb) r 
Starting program: /home/qrx/osexp/sy1/bz1 

Breakpoint 1, main () at bz1.c:7 
7            while((p1=fork())==-1) exit(1); 
(gdb) p p1 
$1 = 0 
(gdb) n 
b 
8            if(p1==0) 
(gdb) p p1 
$2 = 3633 
(gdb) n 
12                    while((p2=fork())==-1) exit(1); 
(gdb) p p2 
$3 = 0 
(gdb) n 
c 
13                      if(p2==0) 
(gdb) p p2 
$4 = 3635 
(gdb) n 
16                            printf("a\n"); 
(gdb) n 
a 
18            return 0;

2编写程序创建进程树如图 1 和图 2 所示,在每个进程中显示当前进程识别码和父进程识别码。

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
    int p1,p2,p3,fpid;
    fpid=getpid();//获取父进程pid
    while((p1=fork())==-1) exit(1);
    if(p1==0)
    {
            printf("b-pid:%d,fpid:%d\n",getpid(),fpid);
            while((p2=fork())==-1) exit(1);
            if(p2==0)
            {
                    printf("c-pid:%d,fpid:%d\n",getpid(),fpid);
                    while((p3=fork())==-1) exit(1);
                    if(p3==0)
                            printf("d-pid:%d,fpid:%d\n",getpid(),fpid);
            }
    }
    else
    {
            printf("fpid:%d\n",fpid);
    }
    return 0;
}

 

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
        int p1,p2,p3,p4,fpid;
        fpid=getpid();
        while((p1=fork())==-1) exit(1);
        if(p1==0)
        {
                printf("b-pid:%d,fpid:%d\n",getpid(),fpid);
                while((p2=fork())==-1) exit(1);
                if(p2==0)
                {
                        printf("c-pid:%d,fpid:%d\n",getpid(),fpid);
                }
        }
        else
        {
                while((p3=fork())==-1) exit(1);
                if(p3==0)
                {
                        printf("d-pid:%d,fpid:%d\n",getpid(),fpid);
                        while((p4=fork())==-1) exit(1);
                        if(p4==0)
                        {
                                printf("e-pid:%d,fpid:%d\n",getpid(),fpid);
                        }
                }
                else
                {
                        printf("fpid:%d\n",getpid());
                }
        }
        return 0;
}

 

posted @ 2017-11-03 21:09  奇热行  阅读(293)  评论(0)    收藏  举报