手机怎么做优惠券网站怎么样黑进网站后台
news/
2025/10/7 9:02:22/
文章来源:
手机怎么做优惠券网站,怎么样黑进网站后台,网站360全景图怎么做,做网站链接容易吗----------------| 本文目录 |---------------- 1. 进程1.1 基本概念1.2 描述进程 - PCB1.2.1 task_struct - PCB的一种1.2.2 task_struct 内容分类 1.3 组织进程1.4 查看进程1.5 通过系统调用获取进程标示符1.6 通过系统调用创建进程 - fork初识 2. 进程状态2.1 看看Linux内核… ----------------| 本文目录 |---------------- 1. 进程1.1 基本概念1.2 描述进程 - PCB1.2.1 task_struct - PCB的一种1.2.2 task_struct 内容分类 1.3 组织进程1.4 查看进程1.5 通过系统调用获取进程标示符1.6 通过系统调用创建进程 - fork初识 2. 进程状态2.1 看看Linux内核源代码怎么说2.2 进程状态查看2.3 Z(zombie) - 僵尸进程2.4 僵尸进程危害2.5 进程状态总结2.6 孤儿进程 3. 进程优先级3.1 基本概念3.2 查看系统进程3.2.1 PRI and NI3.2.2 PRI vs NI 3.3 查看进程优先级的命令3.3.1 用 top 命令更改已存在进程的 nice 3.4 其他概念 1. 进程
1.1 基本概念 课本概念程序的一个执行实例正在执行的程序等。内核观点担当分配系统资源CPU时间内存的实体。 1.2 描述进程 - PCB 进程信息被放在一个叫做进程控制块的数据结构中可以理解为进程属性的集合。课本上称之为 PCBprocess control blockLinux 操作系统下的 PCB 是task_struct。 1.2.1 task_struct - PCB的一种 在 Linux 中描述进程的结构体叫做 task_struct。task_struct 是 Linux 内核的一种数据结构它会被装载到 RAM内存里并且包含着进程的信息。 1.2.2 task_struct 内容分类 标示符描述本进程的唯一标示符用来区别其他进程。状态任务状态退出代码退出信号等。优先级相对于其他进程的优先级。程序计数器程序中即将被执行的下一条指令的地址。内存指针包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针。上下文数据进程执行时处理器的寄存器中的数据。I/O状态信息包括显示的I/O请求分配给进程的I/O设备和被进程使用的文件列表。记账信息可能包括处理器时间总和使用的时钟数总和时间限制记帐号等。其他信息… 1.3 组织进程 可以在内核源代码里找到它。所有运行在系统里的进程都以 task_struct 链表的形式存在内核里。 1.4 查看进程
进程的信息可以通过 /proc 系统文件夹查看。 如要获取 PID 为 1 的进程信息你需要查看 /proc/1 这个文件夹。 大多数进程信息同样可以使用 top 和 ps 这些用户级工具来获取。 #include stdio.h
#include sys/types.h
#include unistd.hint main()
{while (1){sleep(1);}return 0;
}1.5 通过系统调用获取进程标示符 进程 idPID父进程 idPPID #include stdio.h
#include sys/types.h
#include unistd.hint main()
{printf(pid: %d\n, getpid());printf(ppid: %d\n, getppid());return 0;
}1.6 通过系统调用创建进程 - fork初识 运行 man fork 认识 forkfork 有两个返回值父子进程代码共享数据各自开辟空间私有一份采用写时拷贝 #include stdio.h
#include sys/types.h
#include unistd.hint main()
{int ret fork();printf(hello proc: %d!, ret: %d\n, getpid(), ret);sleep(1);return 0;
}fork 之后通常要用 if 进行分流 #include stdio.h
#include sys/types.h
#include unistd.hint main()
{int ret fork();if (ret 0){perror(fork);return 1;}else if (ret 0){// child printf(I am child: %d!, ret: %d\n, getpid(), ret);}else{// fatherprintf(I am father: %d!, ret: %d\n, getpid(), ret);}sleep(1);return 0;
}2. 进程状态
2.1 看看Linux内核源代码怎么说
为了弄明白正在运行的进程是什么意思我们需要知道进程的不同状态。一个进程可以有几个状态在Linux内核里进程有时候也叫任务。
下面是状态在 kernel 源代码里定义
/*
* The task state array is a strange bitmap of
* reasons to sleep. Thus running is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] {
R (running), /* 0 */
S (sleeping), /* 1 */
D (disk sleep), /* 2 */
T (stopped), /* 4 */
t (tracing stop), /* 8 */
X (dead), /* 16 */
Z (zombie), /* 32 */
};R运行状态running并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列里。S睡眠状态sleeping意味着进程在等待事件完成这里的睡眠有时候也叫做可中断睡眠interruptible sleep。D磁盘休眠状态Disk sleep有时候也叫不可中断睡眠状态uninterruptible sleep在这个状态的进程通常会等待IO的结束。T停止状态stopped可以通过发送 SIGSTOP 信号给进程来停止T进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。X死亡状态dead这个状态只是一个返回状态你不会在任务列表里看到这个状态。 2.2 进程状态查看
ps aux / ps axj 命令2.3 Z(zombie) - 僵尸进程 僵尸状态Zombies是一个比较特殊的状态。当进程退出并且父进程使用wait()系统调用没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程表中并且会一直在等待父进程读取退出状态代码。所以只要子进程退出父进程还在运行但父进程没有读取子进程状态子进程进入 Z 状态。 创建一个维持30秒的僵尸进程例子
#include stdio.h
#include stdlib.h
#include unistd.hint main()
{pid_t id fork();if (id 0){perror(fork);return 1;}else if (id 0){// parentprintf(parent[%d] is sleeping...\n, getpid());sleep(30); }else{// childprintf(child[%d] is begin Z...\n, getpid());sleep(5);exit(EXIT_SUCCESS);}return 0;
}编译并在另一个终端下启动监控 开始测试 看到结果 2.4 僵尸进程危害 进程的退出状态必须被维持下去因为他要告诉关心他的进程父进程你交给我的任务我办的怎么样了。可父进程如果一直不读取那子进程就一直处于 Z 状态是的维护退出状态本身就是要用数据维护也属于进程基本信息所以保存在 task_structPCB中换句话说Z 状态一直不退出PCB 一直都要维护是的那一个父进程创建了很多子进程就是不回收是不是就会造成内存资源的浪费是的因为数据结构对象本身就要占用内存想想 C 中定义一个结构体变量对象是要在内存的某个位置进行开辟空间内存泄漏是的 2.5 进程状态总结 至此值得关注的进程状态全部讲解完成下面来认识另一种进程。 2.6 孤儿进程 如果父进程提前退出子进程后退出进入 Z 状态后该如何处理呢父进程先退出子进程就称之为“孤儿进程”。孤儿进程被 1 号 init 进程领养当然要由 init 进程回收。 #include stdio.h
#include stdlib.h
#include unistd.hint main()
{pid_t id fork();if (id 0){perror(fork);return 1;} else if (id 0){ // childprintf(I am child, pid: %d\n, getpid());sleep(10); }else{ // parentprintf(I am parent, pid: %d\n, getpid());sleep(3);exit(0);}return 0;
}3. 进程优先级
3.1 基本概念 CPU 资源分配的先后顺序就是指进程的优先权priority。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的 Linux 很有用可以改善系统性能。还可以把进程运行到指定的 CPU 上这样一来把不重要的进程安排到某个 CPU可以大大改善系统整体性能。 3.2 查看系统进程
在 Linux 或者 Unix 系统中用 ps -l 命令则会类似输出以下几个内容 我们很容易注意到其中的几个重要信息如下 UID代表执行者的身份PID代表这个进程的代号PPID代表这个进程是由哪个进程发展衍生而来的亦即父进程的代号PRI代表这个进程可被执行的优先级其值越小越早被执行NI代表这个进程的 nice 值 3.2.1 PRI and NI PRI 也还是比较好理解的即进程的优先级或者通俗点说就是程序被 CPU 执行的先后顺序此值越小进程的优先级别越高。那 NI 呢就是我们所要说的 nice 值了其表示进程可被执行的优先级的修正数值。PRI 值越小越快被执行那么加入 nice 值后将会使得 PRI 变为PRI(new) PRI(old) nice。这样当 nice 值为负的时候该程序会将优先级值变小即其优先级会变高会更快的被执行。所以调整进程优先级在 Linux 下就是调整进程 nice 值。nice 其取值范围为 -20 ~ 19一共 40 个级别。 3.2.2 PRI vs NI 需要强调的一点是进程的 nice 值不是进程的优先级他们不是一个概念但是进程 nice 值会影响到进程的优先级变化。可以理解 nice 值是进程优先级的修正数据。 3.3 查看进程优先级的命令
3.3.1 用 top 命令更改已存在进程的 nice 使用 top 命令 进入 top 后按 “r” 输入进程 PID 输入 nice 值 3.4 其他概念 竞争性系统进程数目众多而 CPU 资源只有少量甚至 1 个所以进程之间是具有竞争属性的。为了高效完成任务更合理竞争相关资源便具有了优先级。独立性多进程运行需要独享各种资源多进程运行期间互不干扰。并行多个进程在多个 CPU 下分别、同时进行运行这称之为并行。并发多个进程在一个 CPU 下采用进程切换的方式在一段时间之内让多个进程都得以推进称之为并发。 END
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930233.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!