进程和线程(一)

一、什么是进程

进程:进程是一个多任务操作系统,在同一时间,可以有多个进程同时执行。进程是资源分配的最小单元。

 

进程ID(PID):用来区分进程。

 

父进程和子进程:两者的关系是管理和被管理的关系。当父进程被终止时,子进程也随之终止;但是子进程终止,父进程并不一定终止。

 

常用命令:ps -auxf

a:显示用户所有的进程。

u:按照用户名和启动时间顺序显示进程。

x:显示无控制终端的进程。

f:用树状格式来显示进程。

 

二、进程的创建:

1、获取进程

getpid(void) 取得执行目前进程的组识别码。

getppid():获得父进程的pid。

 

2、启动进程

(1)fork(void):创建新的进程。

fork()创建一个进程时,子进程只是完全复制父进程的资源,复制出来的子进程拥有自己的结构和pid,但却复制父进程的其他所有资源。fork()调用执行一次返回两个值,父进程返回子进程的pid,子进程返回0。

子进程结束需要加上exit()函数。

 

(2)vfork(void):建立一个新的进程。

创建的子进程会共享继承父进程的资源。父进程返回子进程pid,子进程返回0.

 

(3)exec族

execl():执行文件,最后一个都必须以NULL结尾

execl(const char *path,const char * argc,....)

eg:execl("/bin/ls","ls","-al","/etx/passwd",NULL)

 

execlp():从PATH环境变量中查找文件并执行。

execlp(const char * file,const char * argc,...);

 

execve():执行文件

execve(const char * filename,char * const argv[],char * const envp[]);

eg:char * argv[] = {"ls","-al","/etc/passwd",NULL};

char * envp[] = {"PATH = /bin",0};

execv("/bin/ls",argc,argv);

 

execvp(const chat * file,char * const argv[]);同上

 

system(const char * string)

eg:system(“ls -al /etc/passwd/etc/shadow”);

 

三、进程等待

僵尸进程:

为已经结束了的进程,还没有从进程列表中删除。僵尸进程太多会导致进程表里的条目满了,进而导致系统奔溃。

 

避免僵尸进程:

(1)wait(int * state):等待子进程结束或进程中断。

成功返回子进程的pid,失败返回-1.

 

(2)waitpid(pid_t pid,int * state,int options):停止目前进程的执行,直到有信号来或者子进程结束。

pid:

pid < -1 :等待进程识别码为pid绝对值的任何子进程。

pid = -1 :等待任何子进程。

pid = 0  :等待进程组识别码和目前进程相同的任何子进程。

pid > 0 :等待进程识别码为pid的子进程。

 

wait(&state)   相当于     waitpid(-1,&state,0)

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值