实验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 条评论

发表评论

Avatar placeholder