• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

linux c 之进程

Linux 水墨上仙 1769次浏览

如果我们把计算机上的操作系统及各种各样的软件看成一系列的有机生命,而不是指令集,那么这就是一个进程的世界,在进程的世界中同样有“道德”和“法制法规”,窥探进程世界,看它的侠肝义胆,风雨江湖路~~~~~

linux支持多个进程同时进行,也就是我们常说的现代操作系统中的多道程序设计,所谓同时是linux系统调度各个进程分别占用cpu的时间。由于每个时间片的时间很小和宏观时间相比,给人的感觉是多个进程在运行。
注:总结下就是在微观是串行,在宏观上是并行。

为了提高程序的运行效率,程序往往分成多个部分组成,这也就是说的并发程序设计。并发程序中各进程是相互独立的,在必要的时候会通过相应的机制进行通信。若进程间要共享资源,为了避免出现冲突,常通过相应通信机制使它们轮流使用共享资源。在进程进行通信时,会出现一个进程等另一个进程完,才能继续运行的情况,这也需要进程间通信以了解对方的运行情况。有时进程间会出现互斥现象,这是会用到锁机制。在并发程序设计中,进程的创建和结束是由用户决定的。这也就出现了父进程和子进程概念。
来源:http://blog.csdn.net/muge0913/article/details/7315522

进程创建

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

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

#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");
     //sleep(1);
     printf("%s\n",pchar);
     printf("%d\n",test_va);
     }
}


喜欢 (0)
加载中……