程序:二进制文件、占用磁盘空间linux
进程:运行着的程序,数据在内存中,占用系统资源,CPU,物理内存()shell
把描述进程的全部信息的那条记录叫作 PCB(process control block)数据结构
每一个进程有且仅有一个PCB并发
linux下的PCB:task_struct
函数
存放在/usr/src/kernels/2.6.32-431.el6.i686/include/linux/sched.h
ui
程序计数器
:程序中即将被执行的下一条指令的地址。spa
内存指针
:包括程序代码和进程相关数据的指针,还有和其余进程共享的内存块指针设计
优先级
:相对于其余进程的优先级。指针
ps -al #可查看进程优先级
renice -5 -p PID #修改进程优先级
#top命令能够实时动态地查看系统的总体运行状况
R 运行 (正在运行或在运行队列中等待) code
S 中断 (休眠中, 受阻, 在等待某个条件的造成或接受到信号)
D 不可中断 (收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
Z 僵死 (进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
T 中止 (进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后中止运行运行)
并行:指两个或者多个事件在同一时刻发生;
并发:指两个或多个事件在同一时间间隔发生
孤儿进程:父进程先退出,子进程就称之为“孤儿进程”
僵尸进程:当进程退出而且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵进程。
僵尸进程放弃了几乎全部的内存空间,没有任何可执行代码,也不能别调度,
仅仅在进程列表保留位置,并且不占用任何内存空间
ps -aux #列出进程详细信息,可配合grep筛选
kill 1234 #杀死指定PID的进程
fork函数,计算机程序设计中的分叉函数
若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;不然,出错返回-1
getpid返回当前进程标识,getppid返回父进程标识。
这条命令在Linux shell下运行会让系统死机
具体意义百度百科上有
execl()函数:执行文件函数
表示后边的参数以可变参数的形式给出且都以一个空指针结束
利用execl将当前进程main替换掉,最后那条打印语句不会输出
execlp()函数:从PATH环境变量中查找文件并执行
第一个参数path不用输入完整路径,给出命令名便可,它会在环境变量PATH当中查找命令
wait()函数用于使父进程(也就是调用wait()的进程)阻塞,
直到一个子进程结束或者该进程接收到了一个指定的信号为止。
若是该父进程没有子进程或者它的子进程已经结束,则wait()函数就会当即返回。
系统调用exit后,该进程并不是立刻消失,而是留下一个叫僵尸进程的数据结构
waitpid()的做用和wait()同样,但它并不必定要等待第一个终止的子进程(它能够指定须要等待终止的子进程)
它还有若干选项,如可提供一个非阻塞版本的 wait()功能,也能支持做业控制。
实际上,wait()函数只是 waitpid()函数的一个特例,在Linux 内部实现 wait()函数时直接调用的就是waitpid()函数