精华内容
下载资源
问答
  • Linux进程生命周期(就绪、运行、睡眠、停止、僵尸) 僵尸的含义 停止状态与作业控制, cpulimit 内存泄漏的真实含义 task_struct以及task_struct之间的关系 初见fork和僵尸 1、进程控制块PCB Task_struct ...
    • 学习交流加(可免费帮忙下载CSDN资源):
    • 个人微信: liu1126137994
    • 学习交流资源分享qq群1(已满): 962535112
    • 学习交流资源分享qq群2: 780902027

    本篇文章主要记录以下学习内容:

    • Linux进程生命周期(就绪、运行、睡眠、停止、僵尸)
    • 僵尸的含义
    • 停止状态与作业控制, cpulimit
    • 内存泄漏的真实含义
    • task_struct以及task_struct之间的关系
    • 初见fork和僵尸

    1、进程控制块PCB

    Task_struct (PCB) 通俗一点的说就是描述进程资源的结构体,也可以称为进程描述符。在这个结构体中存放着这个进程所需要的所有资源的结构的描述。例如我们能想到的进程肯定有进程id,进程的内存管理,对文件的管理,对信号的管理等,那么PCB中就肯定存有类似于下面的结构:

    在这里插入图片描述

    其中PID的数量是有限的,在我自己的Linux系统中是32768

    $ cat /proc/sys/kernel/pid_max
    32768
    
    所以我们不能无限制的创建进程。

    那么在Linux中Task_struct是如何被管理的呢?

    1. 形成链表

    在这里插入图片描述

    1. 形成树
      因为链表遍历的开销比较大,所以会在链表的基础上,形成树结构,这样会使对进程描述符的遍历的时间复杂度更低
      在这里插入图片描述

    2. 形成哈希 :pid->task_struct
      为了更加快捷的访问到进程描述符,可以让进程的pid作为索引,形成哈希结构,这样在实现进程的调度算法时,效率会更高效。

    在这里插入图片描述

    2、进程的生命周期

    在这里插入图片描述

    上图表示了进程的六种状态,就绪态,运行态,深度睡眠态,浅睡眠态,停止态,僵尸态。

    就绪态和运行态在数值上是相等的,都是由宏TASK_RUNNING定义。就绪态和运行太可以相互转换,运行态可以到停止态(例如ctrl+z),停止态可以恢复到就绪态。

    其中,就绪态,运行态,停止态很好理解,这里不再赘述。

    • 深睡眠
      进程处于睡眠态(调用sleep),等到资源到位,就可以被调度(变成就绪态TASK_RUNNING)。
    • 浅睡眠
      进程处于睡眠态(调用sleep),等到资源到位,或者收到信号,就可以被调度(变成就绪态TASK_RUNNING)。

    正常的进程睡眠都是浅睡眠,但是内核中有一些进程处于睡眠态不希望被信号打断,那么它就会处于深睡眠状态。

    • 僵尸态
      资源已经释放,没有内存泄漏等!!!
      但是 Task_struct还在,这样的话,父进程可以根据子进程的Task_struct结构体存的退出码,查出子进程的死因。

    有内核代码如下:
    在这里插入图片描述

    3、作业控制(cpulimit)

    有时候我们的进程的CPU占用率非常高,为了使其他进程可以获得CPU时间,我们可以使用一些手段降低进程的CPU占用率。

    其中cpulimit是之前比较常用的一个命令,它利用间断性的使进程处于停止态,从而降低进程的CPU占有率。

    假设我的进程是一个死循环,且CPU占有率很高,则通过以下命令可以降低该使进程号为10111的进程的CPU占有率变为20%。

    $ cpulimit -l 20 -p 10111
    

    cpulimit的原理:
    在这里插入图片描述

    4、内存泄漏到底是什么

    • 内存泄漏不是进程死了内存没释放

    如果进程死了(退出或者变成僵尸),它所占有的内存资源会瞬间全部释放。
    在这里插入图片描述

    • 内存泄漏是进程活着,但随着时间的推移,内存消耗越来越多

    在这里插入图片描述

    5、初见fork

    1. 初识fork

    看下面程序打印几个hello?

    int main() {
    	fork();
    	printf("hello\n");
    	fork();
    	printf("hello\n");
    	while (1);
    	return 0;
    }
    

    在这里插入图片描述

    假设p1是main函数这个进程,进入函数后,fork产生一个子进程p2,p1和p2各打印一个hello,接着p1和p2又各fork(),分别又产生两个hello,所以一共打印6个hello。

    运行下面程序看如何打印:

    #include <stdio.h>
    #include <sys/wait.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main(){
        pid_t pid;
    
        pid = fork();
    
        if(pid==-1){ /* 创建不成功 */
            perror("Can't creat new process");
            exit(1);
        }
        else if(pid==0){  /* pid==0,子进程运行代码 */
            printf("a\n");
        }
        else {     /* 父进程运行代码 */
            printf("b\n");
        }
    	/* 父子进程都运行的代码 */
        printf("c\n");
        while(1);
    }
    
    

    运行结果为:
    在这里插入图片描述

    • 结果分析:

    fork()函数的返回值是返回两次的,在父进程中返回子进程的pid,在子进程中返回0。借此我们可以在代码中区分开父子进程运行的代码。

    进入函数后首先fork(),产生一个子进程,在子进程的进程空间的环境创建好之前,父进程就已经运行完并打印了b和c,然后子进程打印a和c。

    2. 子死父清场(life_period.c)

    #include <stdio.h>
    #include <sys/wait.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main(void)
    {
    	pid_t pid,wait_pid;
    	int status;
    
    	pid = fork();
    
    	if (pid==-1)	{
    		perror("Cannot create new process");
    		exit(1);
    	} else 	if (pid==0) {
    		printf("child process id: %ld\n", (long) getpid());
    		pause();
    		_exit(0);
    	} else {
    #if 1 /* define 1 to make child process always a zomie */
    		printf("ppid:%d\n", getpid());
    		while(1);
    #endif
    		do {
    			wait_pid=waitpid(pid, &status, WUNTRACED | WCONTINUED);
    
    			if (wait_pid == -1) {
    				perror("cannot using waitpid function");
    				exit(1);
    			}
    
    			if (WIFEXITED(status))
    				printf("child process exites, status=%d\n", WEXITSTATUS(status));
    
    			if(WIFSIGNALED(status))
    				printf("child process is killed by signal %d\n", WTERMSIG(status));
    
    			if (WIFSTOPPED(status))
    				printf("child process is stopped by signal %d\n", WSTOPSIG(status));
    
    			if (WIFCONTINUED(status))
    				printf("child process resume running....\n");
    
    		} while (!WIFEXITED(status) && !WIFSIGNALED(status));
    
    		exit(0);
    	}
    }
    
    • 在if 1不改为if 0的情况下

    编译运行程序,杀死子进程,查看父进程的僵尸态

    编译运行:

    $ gcc life_period.c
    $ ./a.out
    Child process id:6426
    

    另开一个终端先看父子进程的状态:
    在这里插入图片描述
    然后杀死子进程:

    $ kill -9 6426
    

    再查看状态:
    在这里插入图片描述
    可以看到,子进程(pid=6426)的状态已经变味僵尸态

    • 在if 1改为if 0的情况下

    编译运行程序,杀死子进程,查看父进程的僵尸态

    编译运行:

    $ gcc life_period.c
    $ ./a.out
    Child process id:6430
    

    另开一个终端先看父子进程的状态:
    在这里插入图片描述

    然后杀死子进程

    $ kill -9 6430
    

    在第一个终端可以看到子进程被杀死的原因
    在这里插入图片描述
    然后父进程也退出。

    可以看出父进程可以通过waitpid()函数回收子进程的task_struct结构。

    6、总结

    • 理解Linux进程的生命周期(六种状态)
    • 理解task_struct结构
    • 理解僵尸进程(资源已经释放,Task_struct结构还在)
    • 理解内存泄漏的真实含义
    • 理解fork与僵尸态
    • 动手写上述实验代码并自己编译运行

    学习探讨加:
    个人微信:liu1126137994
    个人qq :1126137994

    展开全文
  • 波特率,校验位,数据位,停止位是串口通讯的4个重要的参数。正确设置这几个参数是能正确通讯的前提~ 波特率:波特率是一个衡量传输速度的参数。通俗的讲,波特率就是每秒传多少位。 数据位:衡量通讯中实际数据位的...

    波特率,校验位,数据位,停止位是串口通讯的4个重要的参数。正确设置这几个参数是能正确通讯的前提~

    波特率:波特率是一个衡量传输速度的参数。通俗的讲,波特率就是每秒传多少位。

    数据位:衡量通讯中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。

    停止位:是数据包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

    奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011110,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不是真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

    厂家串口调试助手设置界面:
    在这里插入图片描述

    展开全文
  • 项目背景:242后期,别人写的代码出现问题,我测试中发现的。 当时在内存中设立了一个队列,用arrylist存放任务队列,但是经过一段时间后,发现队列中...同时学会了throw的真正含义,以及什么情况下使用throw,加...

    项目背景:242后期,别人写的代码出现问题,我测试中发现的。

    当时在内存中设立了一个队列,用arrylist存放任务队列,但是经过一段时间后,发现队列中信息没有了,还以为是出现异常的原因,最后,在网友的帮助下,通过在Application_Start(),Application_End()内部写测试方法,最终找到了问题的答案。。

    同时学会了throw的真正含义,以及什么情况下使用throw,加深了,try catch的理解,同时增加了对调试时日志的记录的重要性的认识。。

    下面是我跟网友的聊天记录:

     

    ,多亏了昨晚你的提示,通过在Application_Start(),Application_End()记录日志来判断工作进程是否退出。经过多次测试,总结如下:(1)如果长时间没有操作网站,工作进程会自动退出,这时Application_End()会被调用,当然保存在进程中的队列信息就没有了。(2)如果点击网站后,网站出现异常,我写的代码没有做异常处理即没做catch,这时,网站也不会崩溃,仍然可以正常访问其它网页,估计是IIS采取了防护措施,在代码外部捕捉了异常。

    我 22:17:49

    IIS的应用程序池的属性有工作进程回收的时间设置。这个可以调,所以以后在开发程序时,一些重要的信息还是保存在数据库或文件中,否则,工作进程退出后,这些信息就没有了。。

    我  22:18:47

    否则,工作进程退出后,保存在内存中的一些信息就随着进程的回收或中断丢失了。。

    也就是说,网站在IIS的工作进程回收的时间内没有访问的话,IIS会自动将网站重启咯 

    我12:02:35 

    网站在IIS的工作进程回收的时间内没有访问的话,不是重启,而是关闭。application_end方法会调用。直到有用户访问的话,再调用application_start()。 

    帮我调程序热心肠 12:02:28 

    哦哦哦 

    我是你的影迷 12:03:58 

    别人写的程序,把信息保存到内存中,一段时间发现这个信息没了,现在才找到是这个原因,我把回收的设置关闭了。现在就没问题了。 

     

     

    以下是参考文献:

     

    http://winsvr.org/info/info.php?sessid=&infoid=39&page=4网站主进程退出

    http://www.pxue.com/Html/1005.html

     

    IIS增加了许多错误处理,比如如果I代码出现了异常,即时是throw,IIS会在最外部进行捕获,不会影响其他用户的访问,即程序不会崩溃。。。

     

    转载于:https://www.cnblogs.com/wangzhewang/archive/2011/01/16/1936816.html

    展开全文
  • 上一章给大家分享了SelectCase结构形式并且和IF结构做了比较,今天这一章给大家分享一下VBA基本语法中比较重要的结构For循环结构。在实际的工作当中我们要对excel表格的数据进行大量的重复操作,这时我们就需要For ...

    上一章给大家分享了SelectCase结构形式并且和IF结构做了比较,今天这一章给大家分享一下VBA基本语法中比较重要的结构For循环结构。

    在实际的工作当中我们要对excel表格的数据进行大量的重复操作,这时我们就需要For Next结构形式来处理,这样就把复杂的重复问题给解决了。

    先看一下For Next的语法结构?

    For 循环变量=初始值 to 结束值 step 步长

    循环体

    Exit For

    Next 循环变量

    下面具体解释一下看截图:

    b8b086ac3b1f0398ce695897871e99b5.png

    方便理解我画一个For…….Next循环的流程控制图:

    02a74955b849f1772cbc4e6c716abc29.png

    注意:该流程图中的循环变量自加1(循环变量=循环变量+1),如果你的步长不是1,那么就不是自加1,是你自己设置的步长数(循环变量=循环变量+步长)

    先举一个简单的例子:

    利用for……next实现excel中的单元格,隔行变色。

    59377281fbd15c937ed25f7f7ce54640.png

    代码1:

    Sub ff()

    Dim i As Integer

    For i = 1 To 10 Step 2

    Worksheets("sheet36").Cells(i, "B").Interior.Color = RGB(255, 0, 0)

    Next

    End Sub

    再举个例子:

    利用for……next循环结构来把这张表格答应输出到另外一张表格中,再利用循环结构求出总分并输出到表格中(实际意义不大,主要是熟悉for循环的使用)

    6bfc58eaca84f9eb4405c16e550fbcb9.png

    空的数据表格:

    b9e84deaacc7c5d239bf5b5546b7e7df.png
    0eba83f412be5c213bb320e4343a89c0.png

    程序的具体解释如下:

    45514a0a5da0be69a031e51edf4ac236.png
    f39565ccf3b49296a427301b6d4b5ea1.png

    代码2:

    Sub s()

    Dim arr() As Variant

    Dim v As Integer, n As Integer, m As Integer

    Dim i As Integer, j As Integer, k As Integer, h As Integer

    j = WorksheetFunction.CountA(Worksheets("sheet37").Range("A:A"))

    ReDim arr(1 To j) As Variant

    For h = 1 To j

    For i = 1 To j

    arr(i) = Worksheets("sheet37").Cells(i, h)

    Next

    For k = 1 To j

    Worksheets("sheet38").Cells(k, h) = arr(k)

    If h >= 2 Then

    If Worksheets("sheet38").Cells(h, 3) >= 80 And Worksheets("sheet38").Cells(h, 4) > 70 Then

    Worksheets("sheet38").Cells(h, 6).Font.Color = RGB(0, 255, 0)

    End If

    End If

    Next

    Next

    For v = 1 To 7

    k = 0

    Worksheets("sheet38").Cells(v + 1, 6) = 0

    For n = 1 To 7

    If n > 2 Then

    k = k + Worksheets("sheet38").Cells(v + 1, n)

    End If

    Next

    Worksheets("sheet38").Cells(v + 1, 6) = k

    Next

    End Sub

    今天就给大家分享到这里,明天继续分享,喜欢的请关注我,谢谢!

    展开全文
  • BOSS含义

    千次阅读 2014-02-18 16:50:57
    该系统由电信部门的计费系统发展而来,基本功能包括用户资料管理、计费、出账、结算等,负责登记用户资料、开启或停止对用户的服务、实时的根据不同套餐资费标准计算手机、固定电话用户通话时的消费金额,准
  • Linux htop状态含义

    千次阅读 2019-12-03 09:35:17
    htop S那一列的各个字母含义 R: running; 表示进程正在运行 S: sleeping; 表示进程休眠 T: traced/stopped; 表示进程停止 Z: zombie; 表示僵尸进城 D: disk sleep; 表示硬盘休眠 ...
  • service简单含义

    2018-02-19 21:22:45
    service 两种启动方式 1:started 其他组件调用 startService 它将一直运行在后台,直到自己停止。 2: 其他组件调用bindService 绑定组件,该srvice 可与绑定的组件 交互。service可以绑定多个组件...
  • sonar中bat文件含义

    2018-11-26 10:17:48
    sonar中bat文件含义 InstallNTService.bat 安装sonarqube为系统服务 StartNTService.bat 启动sonarqube系统服务 StartSonar.bat 命令行启sonarqube服务(关闭命令行即关闭服务) StopNTService.bat 停止sonarqube...
  • Linux系统服务、目录含义及其配置

    千次阅读 2015-02-03 17:59:15
    Linux 系统服务有时也称为守护程序,是在Linux启动时自动加载并在Linux退出时自动停止的系统任务。在Linux 启动过程中我们可以看得很多starting … 提示信息,该信息表示正在启动系统服务,而在Linux 退出时,我们也...
  • 停止错误

    2007-09-08 22:52:00
    现在不用怕了,我来给大家讲解一下非法作的每个详细资料的具体含义。 1、停止错误编号:0x0000000A 说明文字:IRQL-NOT-LESS-OR-EQUAL 通常的原因:驱动程序使用了不正确的内存地址。 解决方法:如果无法登陆,则...
  • apache正则表达式含义

    2019-10-04 13:45:30
    [L] Last rule(最后一条规则): 告诉服务器在本条规则执行完后停止重写URL [N] Next(下一条规则): 告诉服务器继续重写,指导所有重写指令都执行过 [G] Gone(丢失): 命令服务器返回410 GONE(n...
  • 首先要知道error_reporting()函数是用来设置错误级别并返回当前级别的。它有14个错误级别,如下: 1 E_ERROR致命的运行时错误。...脚本的执行不会停止4 E_PARSE编译时解析错误。解析错误应该只由分析...
  • TEAM BUTLDING MOTOMANINFORM说明 ...若因 ABORT 指令停止的情况,则从程序选择画面到重新选择程序为止不能再次启动。SETUALM使任何编号、名称、子代码的警报发生。DIALOG实行程序时显示对话框。另外,若...
  • android lint选项含义

    2016-10-25 16:44:15
    lint检查对于app来说也是很重要的,可以检查出很多问题。  lint配置  从stackoverflow上扒了一个配置。 android { lintOptions { // true--关闭lint报告的... // true--错误发生后停止gradle构建 abortOnError fa
  • 中断的含义

    2008-11-03 19:22:36
    是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU暂时停止正在运行的程序,转到为该内部/外部事件或预先安排的事件服务的程序中去,服务完毕,再返回去继续运行被暂时中断的程序,这个...
  • 我不确定我是否会独自一个人,但是在我看来,对finalize方法的弃... 一个不只是停止调用不推荐使用的方法 赋予术语“已弃用”的含义 每当过时的Java方法成为新闻时,我总是喜欢用语言来讨神,因为即使过时了方...
  • nginx配置location [=|~|~*|^~] /uri/ { … }的基本用法表达含义= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。 ~ 为区分大小写匹配(可用正则表达式) !~为区分大小写不匹配 ~* 为不区分大小写...
  • 10.1.8 Activity生命期的代码含义 在过去的应用程序开发中,读者大多数已经了解了Activity生命期中的几个主要状态,并知道如何在这些状态中做不同的事情。但多多少少还是存在一些疑惑,比如start和stop状态从代码...
  • ps命令stat段含义

    2020-02-24 17:04:32
    1.STAT字段 进状态 意义 ...停止或被追踪 Z 僵尸进程 W 进入内存交换(从内核2.6开始无效) X 死掉的进程 < 高优先级 N 低优先级 L 有些页被锁进内存 s 包含子进程 + ...
  • 一、原理介绍:使用Interrupt来...它还拥有最高决定权停不停止,也就是说如果我们想中断一个线程但是那个线程自身并不想被中断,那么ok我们对此无能为力,这就是“而不是强制”的含义。 最好的停止线程的方式是使...
  • Windows非法操作代码含义 这里的同志们肯定都用过Windows的,想必经历过“非法操作”吧。一般的“非法操作”有两个选项:“关闭”和...停止错误编号:0x0000000A 说明文字:IRQL-NOT-LESS-OR-EQUAL 通常的原因:驱动程
  • 使用ExecutorService类时,经常用到 shutdown() 、shutdownNow() 、awaitTermination() 3个方法,下面我们来说说它们的含义和三者的区别。 shutdown():停止接收新任务,原来的任务继续执行 1、停止接收新的submit...
  • 最近发现一个问题,ps命令输出里面进程状态为S+的含义,网上好多文章都说是表明进程“位于在后台进程组”。 例如下面这个ps命令输出说明: D 不可中断 Uninterruptible sleep (usually IO) R 正在运行,或在队列中...
  • 断点调试各个按钮含义

    千次阅读 2018-10-19 11:00:38
    Step Over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。在没有子函数时,和Step Into效果一样。 Step Into:单步执行,遇见子函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 941
精华内容 376
关键字:

停止含义