Linux C编程学习:进程,进程,进程!

Linux支持多个进程同时进行,也就是我们常说的现代操作系统中的多道程序设计,所谓同时是Linux系统调度各个进程分别占用cpu的时间。由于每个时间片的时间很小和宏观时间相比,给人的感觉是多个进程在运行。为了提高程序的运行效率,程序往往分成多个部分组成,这也就是说的并发程序设计。并发程序中各进程是相互独立的,在必要的时候会通过相应的机制进行通信。若进程间要共享资源,为了避免出现冲突,常通过相应通信机制使它们轮流使用共享资源。在进程进行通信时,会出现一个进程等另一个进程完,才能继续运行的情况,这也需要进程间通信以了解对方的运行情况。有时进程间会出现互斥现象,这是会用到锁机制。在并发程序设计中,进程的创建和结束是由用户决定的。这也就出现了父进程和子进程概念。

进程的创建:

#include <unistd.h>
pid_t fork(void); 
pid_t vfork(void);

在这简述,fork创建的子进程是父进程的一个拷贝,但是和父进程使用不同的数据段和堆栈。vfork和fork基本相同但是vfork不会复制父进程的数据段,它们共享数据段。这是因为vfork常和exec函数使用去调用一个程序如ls命令,开启一个新的进程。vfork后父进程会等待子进程运行结束或调用了exit。fork后父进程和子进程的运行顺序是不确定的。

下面是体现它们性质的程序:

#include <sys/types.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
 
main()   

    pid_tpid; 
    char*pchar = "before fork"; 
    inttest_va = 1; 
 
    if((pid= fork()) < 0 ) 
    { 
        printf("forkerror!!\n"); 
        exit(1); 
    } 
 
    elseif(pid == 0) 
    { 
        printf("childprocess\n"); 
        pchar= "child pchr\n"; 
        printf("%s\n",pchar); 
 
        test_va= 2; 
 
        printf("%d\n",test_va); 
        _exit(2); 
    } 
 
    else 
    { 
        printf("parentprocess\n"); 
        printf("%s\n",pchar); 
        printf("%d\n",test_va); 
    }   
}

fork:

Linux C编程学习:进程,进程,进程!

vfork:

Linux C编程学习:进程,进程,进程!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0fefeaabfc562bf7c5d5aaa0af82670a.html