实验1、2要传到PAT上/注意编码的格式问题
Linux 进程管理
Linux进程概念
·Linux进程与传统UNIX进程的概念没有多大区别。 没有真正意义上的线程概念。但Linux通过clone()系统调用支持轻量级(Lightweight process)进程(线程)。·Linux还支持内核线程,内核线程永远在内核态运行,没有用户空间。
ps指令
Linux中运行ps命令,你能得到当前系统中进程的列表,比如:
$ ps x
PID TTY STAT TIME COMMAND
1668 tty1 Ss 0:00 -bash
3209 tty1 R 0:02 xterm
3211 pts/0 Ss 0:00 bash
4400 pts/0 R+ 0:00 ps x
Linx进程状态
task_struct
~~Linux的PCB控制块
结构中定义:
volatile long state;
int exit_state;
- 用于表示进程的状态
- 前者表示用来表征进程的可运行性,
- 后者表征进程退出时候的状态。
do_fork()
do_fork()的执行过程(源代码在kernel/fork.c文件中):
1. 调用alloc_task_struct()分配子进程task_struct空间。严格地讲,此时子进 程还未生成。
2. 把父进程task_struct的值全部赋给子进程task_struct。
3. 检查是否超过了资源限制,如果是,则结束并返回出错信息。更改一些统 计量的信息。
4. 修改子进程task_struct的某些成员的值使其正确反映子进程的状况,如进 程状态被置成TASK_UNINTERRUPTIBLE。
5. 调用get_pid( )函数为子进程得到一个pid号。
EXE()
在系统中创建一个进程的目的是需要该进程完成一定的任务,需要该进程执行 它的程序代码。
在Linux系统中,使程序执行的唯一方法是使用系统调用exec()。
系统调用exec()有多种使用形式,称为exec()族,它们只是在参数上不同,而功能是相同的。如: int execl(const char * path, const char *arg0,…, const char *argn,(char*)0)
- path: 要执行的程序文件的完整路径名
- arg0: 要执行程序的文件名或命令名
- arg1,…,argn: 执行程序所需的参数
exec()函数返值:
- 该系统调用将引起另一个程序的执行,成功调用后并不需要返回。
- 调用失败时,返值为-1。
0 条评论