程序是静态的话,那么进程就是活动的。进程是程序在某个数据集上运行的过程,而PID就是活动进程的标识。也就说只有程序运行了,才产生进程。当然在进程中还包含线程,我们程序中的main函数就是主线程,一般程序中如果没有再定义其他线程的话,那就是单线程的。
PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收,可能会被继续分配给新运行的程序。
只要运行一程序,系统会自动分配一个标识!! 1. 是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。 2.只要没有成功运行其他程序,这个pid会继续分配给当前要运行的程序!! 3.如果成功运行一个程序,然后再运行别的程序时,系统会自动分配另一个pid!!
getpid()函数查看当前进程的进程号
getppid()函数是查看当前进程的父进程的进程号
fork入门知识
一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;
在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
fork出错可能有两种原因:
1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。
2)系统内存不足,这时errno的值被设置为ENOMEM。
创建新进程成功后,系统中出现两个基本完全相同的进程,这两个进程执行没有固定的先后顺序,哪个进程先执行要看系统的进程调度策略。