进程
1. 进程
进程的描述
a.进程是一个正在运行的程序
b.每个进程都有一个进程控制块,PCB
c.进程进程控制块是用一个结构体struct task_struct 来实现
一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
fork 创建进程,返回值为0是子进程,返回值大于0为父进程(返回值的数值是子进程id),返回值为负数表示fork失败。
用fork创建进程的例子如下:
[root@localhost linux]# vim fork_process.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> int main () { char * process_name = NULL; int n, i; pid_t id = fork(); if (id == 0) { process_name = "child "; n = 2; } else { process_name = "parent "; n = 5; } for ( i = 0; i < n; i++) { printf("process=%s pid=%d ppid=%d n=%d \n", process_name,getpid(),getppid(),n); sleep(2); } }
编译:gcc -o fork_process fork_process.c
运行结果:
[root@localhost linux]# ./fork_process process=parent pid=25934 ppid=1312 n=5 process=child pid=25935 ppid=25934 n=2 process=parent pid=25934 ppid=1312 n=5 process=child pid=25935 ppid=25934 n=2 process=parent pid=25934 ppid=1312 n=5 process=parent pid=25934 ppid=1312 n=5 process=parent pid=25934 ppid=1312 n=5
如上结果可知:
当fork 返回值为0时,执行子进程,n 的值为2输出两次,执行父进程时n的值为5执行5次。
从pid和ppid 可以看出父进程的id和子进程的id