王千千

Linux进程线程初探(多进程与进程间通信-管道)

霸气de小男生 提交于 2019-12-09 20:50:32
先上一个多进程的简单多进程实例,此实例将在同一个程序中创建两个进程: /* 程序说明: 创建两个进程,进程一执行”ls -l“操作,进程二做sleep操作 主进程阻塞等待进程1结束,再等待进程2结束,程序结束 */ #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> int main() { pid_t child1,child2; child1 = fork(); //进程1 if(child1 == -1){ perror("child1 creat error:"); exit(1); }else if(child1 == 0){ if(execlp("ls","ls","-l",NULL) < 0){ perror("execlp error:"); exit(1); } exit(0); } child2 = fork(); //进程2 if(child2 == -1){ perror("child2 creat error:"); exit(1); }else if(child2 == 0){ sleep(3); exit(0); } // waitpid(child1,NULL,0); 主进程 wait(0);

Linux进程线程初探(概念)

自古美人都是妖i 提交于 2019-11-30 10:43:51
多任务操作系统下通常有3个基本概念: 任务、进程、线程。 任务 :任务是一个逻辑概念,是为实现某一目的的一些列操作。一次任务可激发多个进程,这些进程相互合作来完成目标。 进程 :指一个具有功能的程序在某个数据集合上的一次动态执行过程,它是操作系统进行资源分配和调度的基本单元。 进程和程序的区别:程序是一段静态的代码,是保存在ROM上的指令和数据的集合,没有任何执行的概念;而进程是一个动态的概念,它是程序的一次执行过程,它包括了动态创建、调度、执行和消亡的整个过程。 线程 :进程是系统中程序执行和资源分配的基本单位。 每个进程都拥有自己的数据段、代码段、堆栈段,所以进程切换的操作对系统的开销较大。为了提高效率,操作系统引入了线程,也称为轻量级进程。 线程可以对进程的内存空间和资源访问,并与同一进程中的其他线程共享。因此,线程的切换开销比进程小的多。一个进程可以拥有多个线程,其中每个线程共享该进程所拥有的资源和地址空间,因此,任何线程对系统资源的操作都会给其他的线程带来影响,所以应注意多线程中的同步。 那么进程到底拥有那些资源呢,系统又是怎么对进程进行资源分配和调度的呢? 进程的产生 :系统首先在新的地址空间里创建进程、读入可执行文件、最后开始执行。系统在一开始就会初始化一个进程,叫做init(),在Linux中进程的创建依赖于函数fork(),fork(