LINUX进程管理
1. 进程是什么?
一个进程就是出于执行期的程序, 包括:可执行程序代码(代码段), 打开的文件, 挂起的信号, 内核内部数据, 处理器状态, 地址空间, 一个或多个执行线程, 当然还包括用来存放全局变量的数据段, 等等.
2. 什么是线程?它和进程的关系是什么样的? 线程在LINUX中具体是怎么样实现的?
是在进程中活动的对象, 对linux而言, 线程只不过是一种特殊的进程.
线程之间可以共享虚拟内存, 但拥有各自的虚拟处理器.
3. 进程在内核中的表示.
3.1 通过大约1.7K(在32位的机器上)的进程描述符task_struct来表示, 所有这些结构体组成一个双向的循环列表(被称为task list).
3.2 这个task_struct包含了内核管理一个进程所需的所有信息.
3.3. 在2.6以前的内核中,各个进程的task_struct存放在它们内核栈的尾端; 现在是用slab分配器来动态生成的, 只需在栈底(对于向下增长的栈来说)或栈顶(对于向上增长的栈来说)创建一个新的结构struct_thread_info.
task_struct结构体:
struct_thread_info结构体:
3.4 进程有下面这些状态:
4. 进程的创建
5. 进程的终结过程
一些大的概念:
1. UNIX操作系统的两个基本抽象: 进程和文件.
2. 在现代操作系统中, 进程提供两种虚拟机制: 虚拟处理器和虚拟内存.
相关文档:
1. lpr: line printer 按行打印, 用来将一个或者多个文件放入打印队列等待打印。
举例:
lpr report #打印文件report
lpr -Pprinter1 report #将文件在名称为 printer1 的打印机上打印;
2. touch
修改文件的访问和修改时间。
3. linux中目录由“冒号”分隔; ......
线程处于分离状态后,当线程退出后,则有操作系统来负责系统的回收。
创建分离状态线程的方法有:
1、在线程函数中调用, pthread_detach(pthread_self());
2、线程属性的设置函数
摘自:Unix 环境高级编程
int makethread(void *(*fn),void *arg)
{
int err;
&n ......
根据MAN帮助翻译的,不知道准不准确:
D 不可中断的休眠进程(一般为 IO相关的)
R 正在运行的或将运行的(在运行队列中)
S 忆中断的休眠进 ......
Linux下很多程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。getopt()是一个专门设计来减轻命令行处理负担的库函数。
1、命令行参数
命令行程序设计 ......