[linux]进程(一)--基本概念
简单来说进程就是执行期的程序,但是同时进程也不至于此,它还包括了其它资源(如打开的文件,挂起的信号等等)
Linux是一个多任务多用户操作系统,一个任务(task)就是一个进程(process),即进程=任务,在linux系统中,进程和线程共享一系列的资源(地址空间,文件,信号,名字空间等)
2,进程的标识;
每个进程都有一个独一无二的结构体即struct task_struct,一个进程相关的所有信息都可以在该结构体里标识,每一个进程的task_struct又组成了一个任务队列,用双向链表表示:另外每一个进程还对应一个独一无二的数字,即PID,PID最大值为32767(32768=8*4096,32位系统一个页是4096字节,每个字节为8bit),后一个进程创建的PID是前一个进程PID加1,当PID到达最大值后又从最小值开始,linux用pidmap_array位图来知道哪些pid被使用,一个进程中所有线程使用的PID是相同的,但是有各自不同的线程ID,线程ID只在该进程环境中有效,进程的PID在整个系统是唯一的,
- struct task_struct
- {
- //......
- pid_t pid;
- }
- #define current get_current()
- static inline struct task_struct *get_current(vold)
- {
- return current_thread_info()->task;
- }
内核将进程的状态保存在struct task_struct的state字段中:
- struct task_struct
- {
- volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
- //......
- }
如何处理僵尸进程:找出父进程号,然后杀死父进程,在Android下,子进程一起被杀死
内核中设置某个进程状态的函数: set_task_sate(task,state);
- sched.h
- struct task_struct
- {
- //......
- int prio, static_prio, normal_prio;
- unsigned int rt_priority;
- //......
- }
② normal_prio指的是任务的常规优先级,该值基于static_prio和调度策略计算。
③ static_prio指的是任务的静态优先级,在进程创建时分配,该值会影响分配给任务的时间片的长短和非实时任务动态优先级的计算。范围是120+nice值,nice值范围是-20到19
④ rt_priority指的是任务的实时优先级。若为0表示是非实时任务,[1, 99]表示实时任务,值越大,优先级越高。
对于非实时任务,prio = normal_prio = static_prio
- {
- PIDTYPE_PID, // 进程的PID
- PIDTYPE_TGID, // 线程组领头进程的PID
- PIDTYPE_PGID, // 进程组领头进程的PID
- PIDTYPE_SID, // 会话领头进程的PID
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。