首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程睡眠原理(基于linux2.6.12.1)

但这是被动,不是进程控制,也就是说,进程访问一个资源时候,如果不能被满足,进程会被系统挂起,等到条件满足时候,系统会唤起进程。 今天介绍是一种进程主动睡眠能力。...即进程自己让自己挂起,等到一定时间后,被系统唤醒(时间到或者收到信号)。这个能力由sleep函数提供。...即sleep函数是由操作系统[nanosleep](http://www.man7.org/linux/man-pages/man2/nanosleep.2.html)函数实现。...0 : timeout; } 接着往系统新增一个定时器,然后发送进程调度,该进程随即进入挂起状态。等到一定时间后,进程会唤醒。...__data是在 timer.data = (unsigned long) current; 中设置。这就是进程主动睡眠(sleep)大致原理。

1.3K10

深入理解Linux内核之进程睡眠

注:由于篇幅问题,文章分为上下两篇,且这里不区分进程和任务,统一使用任务来表示进程。 主要讲解以下内容: 睡眠三种状态 睡眠内核原理 用户态睡眠 内核态睡眠 总结 2....睡眠三种状态 任务睡眠有三种状态: 浅度睡眠 中度睡眠 深度睡眠 2.1 浅度睡眠 进程描述符state使用TASK_INTERRUPTIBLE表示这种状态。...当然,内核态中,睡眠有两种场景:一种是睡眠特定时间延迟操作(唤醒条件为超时),一种是等待特定条件满足(如IO读写完成,可睡眠锁被释放等)。...6.总结 进程睡眠按照应用场景可以分为:延迟睡眠和等待某些特定条件而睡眠,实际上都可以归于等待某些特定条件而睡眠,因为延迟特定时间也可以作为特定条件。...进程睡眠按照进程所处特权级别可以分为:用户态进程睡眠和内核态进程睡眠,用户态进程睡眠需要进程通过系统调用陷入内核来发起睡眠请求。

2.6K40
您找到你想要的搜索结果了吗?
是的
没有找到

linux0.11进程睡眠唤醒原理分析

进程睡眠是通过调用sleep_on函数,该函数修改了进程状态并且通过schedule函数切换到其他进程执行,从而实现进程挂起,TASK_UNINTERRUPTIBLE状态进程只能被wake_up...TASK_INTERRUPTIBLE状态进程可以被wake_up和信号唤醒。唤醒时候也是通过修改进程状态为可运行,然后等待下一次进程调度,被唤醒进程不一定马上得到执行。...,即tmp指向第一个睡眠节点 头指针指向当前进程,这个版本实现没有采用真正链表形式, 他通过每个进程在栈中临时变量形成一个链表,每个睡眠进程, 在栈里有一个变量指向后面一个睡眠节点...,然后把链表头指针指向当前进程, 然后切换到其他进程执行,当被wake_up唤醒时候,wake_up会唤醒链表第一个 睡眠节点,因为第一个节点里保存了后面一个节点地址...,可以通过wake_up和接收信号唤醒,不可中断时候, 能保证唤醒时候,是从前往后逐个唤醒,但是可中断睡眠无法保证这一点, 因为进程可能被信号唤醒了,所以需要判断全局指针是否指向了自己

2.3K40

深入理解Linux内核之进程睡眠(下)

当任务睡眠完成,定时器超时,会调用之前在__hrtimer_init_sleeper设置超时回调函数hrtimer_wakeup将睡眠任务唤醒(关于进程唤醒在这里就不在赘述,在后面的进程唤醒专题文章在进行详细解读...当然,内核态中,睡眠有两种场景:一种是睡眠特定时间延迟操作(唤醒条件为超时),一种是等待特定条件满足(如IO读写完成,可睡眠锁被释放等)。...6.总结 进程睡眠按照应用场景可以分为:延迟睡眠和等待某些特定条件而睡眠,实际上都可以归于等待某些特定条件而睡眠,因为延迟特定时间也可以作为特定条件。...进程睡眠按照进程所处特权级别可以分为:用户态进程睡眠和内核态进程睡眠,用户态进程睡眠需要进程通过系统调用陷入内核来发起睡眠请求。...对于进程睡眠,内核主要需要做三大步操作:1.设置任务状态为睡眠状态 2.记录睡眠任务 3.发起主动调度。

1.9K20

深入理解Linux内核之进程睡眠(上)

注:由于篇幅问题,文章分为上下两篇,且这里不区分进程和任务,统一使用任务来表示进程。 主要讲解以下内容: 睡眠三种状态 睡眠内核原理 用户态睡眠 内核态睡眠 总结 2....睡眠三种状态 任务睡眠有三种状态: 浅度睡眠 中度睡眠 深度睡眠 2.1 浅度睡眠 进程描述符state使用TASK_INTERRUPTIBLE表示这种状态。...2.2 中度睡眠 进程描述符state使用TASK_KILLABLE表示这种状态。 可以被致命信号所打断。...进程描述符state使用TASK_UNINTERRUPTIBLE表示这种状态。...cfs运行队列最小虚拟运行时间 deactivate_task会设置任务on_rq 为0来 标识是睡眠 ,然后 调用到调度类dequeue_task方法,在cfs中设置se->on_rq

1.4K20

关于 Linux 进程睡眠和唤醒 ,来看这篇就够了~

1 Linux 进程睡眠和唤醒 在 Linux 中,仅等待 CPU 时间进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程状 态标志位为 TASK_RUNNING。...一旦一个运行中进程时间片用完, Linux 内核调度器会剥夺这个进程对 CPU 控制权,并且从运行队列中选择一个合适进程投入运行。 当然,一个进程也可以主动释放 CPU 控制权。...在现代 Linux 操作系统中,进程一般都是用调用 schedule() 方法进入睡眠状态,下面的代码演示了如何让正在运行进程进入睡眠状态。...在这个时间片内,B 进程执行完了它所有的指令,因此它试图唤醒 A 进程,而此时 A 进程还没有进入睡眠,所以唤醒操作无效。...4 Linux 内核例子 在 Linux 操作系统中,内核稳定性至关重要,为了避免在 Linux 操作系统内核中出现无效唤醒问题, Linux 内核在需要进程睡眠时候应该使用类似如下操作: /*

2.2K90

关于 Linux 进程睡眠和唤醒 ,来看这篇就够了~

1 Linux 进程睡眠和唤醒 在Linux 中,仅等待 CPU 时间进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程状 态标志位为 TASK_RUNNING。...一旦一个运行中进程时间片用完, Linux 内核调度器会剥夺这个进程对 CPU 控制权,并且从运行队列中选择一个合适进程投入运行。 当然,一个进程也可以主动释放 CPU 控制权。...在现代 Linux 操作系统中,进程一般都是用调用 schedule() 方法进入睡眠状态,下面的代码演示了如何让正在运行进程进入睡眠状态。...在这个时间片内,B 进程执行完了它所有的指令,因此它试图唤醒 A 进程,而此时 A 进程还没有进入睡眠,所以唤醒操作无效。...4 Linux 内核例子 在 Linux 操作系统中,内核稳定性至关重要,为了避免在 Linux 操作系统内核中出现无效唤醒问题, Linux 内核在需要进程睡眠时候应该使用类似如下操作: /*

7.3K10

进程启动时间监控(linux篇)

摘要:这次我们来谈谈如何采集一个进程启动时间 以下内容使用go语言实现 linux 进程启动时间采集 方法一 直接读取/proc/{pid} 文件夹时间戳方式(不准确但效率高),以下是方法一代码,...= nil { return nil } proc.mtime = stat.ModTime().Unix() 方法二 使用(现在时间-从系统启动到现在时间) + 进程启动时距离系统启动时时间间隔得到...jiffies单位,用来记录自系统启动以来产生节拍总数。...启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量值。一秒内时钟中断次数等于Hz,所以jiffies一秒内增加值也就是Hz。...输出结果 [输出结果] 引用 go 获得进程启动时间两种方法

4K10

linux获取进程执行时间方法示例

linux获取进程执行时间有两种方法可以获取,第一种是用time命令,time 进程。...第二种是通过在程序中进行记录,首先利用sysconf函数获取时钟滴答数,再用times获取tms结构,详细看下面的示例代码 1、前言 测试一个程序执行时间时间包括用户CPU时间、系统CPU时间、时钟时间...之前获取之前时间都是在程序main函数用time函数实现,这个只能粗略计算程序执行时间,不能准确获取其他时间。在看《APUE》时,书中有关程序时间测试程序,非常正规,提供这三个时间。...2、获取方法 有两种方法可以获取,第一种是用time命令,time 进程。第二种是通过在程序中进行记录,首先利用sysconf函数获取时钟滴答数,再用times获取tms结构。...time of children */   }; 复制代码 代码如下: #include  clock_t times(struct tms *buf); 注意:此处计算时间是时钟滴答数

2.8K00

Linux下查看进程启动和运行时间

有时需要知道某进程运行时间,比如我想知道我sra文件转换成fq格式转化速度。以便我做好时间安排。...:进程名 lstart:开始时间 etime:运行时间 运行结果如下: 91413 pts/0 root fastq-dump Tue May 21 10:01:44...I 5月09 0:00 [rcu_bh] USER:用户名 %CPU:进程占用CPU百分比 %MEM:占用内存百分比 VSZ:该进程使用虚拟內存量(KB) RSS:该进程占用固定內存量...(KB)(驻留中页数量) STAT:进程状态 START:该进程被触发启动时间 TIME:该进程实际使用CPU运行时间 top命令 top也可以看进程信息,与ps区别如下 ps看命令执行那刻进程信息...,top是持续监视,ctrl c退出 ps只是查看进程,而top还可以监视系统性能,如平均负载,cpu和内存消耗 总体来说, ps主要是查看进程,尤其你关心进程 top主要看cpu,内存使用情况

15.2K10

Linux进程调度_linux进程查看和调度

这种类型进程经常处于可以运行状态,但是都只是运行一点点时间,绝大多数时间都在处于阻塞(睡眠状态。...Linux 系统为了提升响应速度,倾向于优先调度 I/O 消耗型。...一、普通进程Linux 中普通进程依赖称之为 nice 值 东东来进行进程优先级描述。nice 值范围是 [-20, 19]。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程优先级越小 任何实时进程优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总调度结构...Linux 调度时机 ---- 一、进程切换 从进程角度看,CPU是共享资源,由所有的进程按特定策略轮番使用。

20.5K10

急性睡眠剥夺和慢性睡眠限制后个体调制睡眠稳态压力增长

研究者收集了14名健康被试,其中有9名有效数据,参加实验被试分别进行了40小时急性睡眠剥夺和7天每晚床上时间为5个小时慢性睡眠限制,两种条件时间间隔为2个星期,在这个期间内进行一星期每晚8小时常规睡眠...急性睡眠剥夺在实验室进行,慢性睡眠限制则是通过减少被试在自己床上睡眠时间2小时。...EEG在0.5-4.5频段强度代表了由于清醒时间过长睡眠调控稳态压力增长。...值得一提是,实验结果发现SWA时间窗对于研究慢性睡眠限制影响十分重要,例如当在一个固定时间窗内计算SWA 时,如果第一个非快速眼动期间时长和第一个非快速眼动期间N3时长改变了,会导致这两种条件...因此在慢性睡眠限制后,处理时间动态变化尤为重要。如在快速眼动阶段睡眠压力会与非快速眼动阶段睡眠压力有交互作用,可能导致第一个非快速眼动阶段更短。

1.7K70

LinuxLinux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

1.进程创建 1.1 fork函数 在linux中fork函数时非常重要函数,它从已存在进程中创建一个新进程。.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....utility.h [root@localhost epoll]# ps PID TTY TIME CMD 3451 pts/0 00:00:00 bash 3514 pts/0 00:00:00 ps 用下图时间轴来表示事件发生次序...其中时间从左向右。shell由标识为sh方块代表,它随着时间流逝从左向右移动。shell从用户读入字符串"ls"。...Linux鼓励将这种应用于程序之内模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用程序执行一定操作,然后通过exit(n)来返回值。

10110

Linux进程管理

02 — ps ps 命令用于显示当前系统中由该用户运行进程列表 选项 说明 -ef 查看所有进程及其 PID(进程号)、系统时间、命令详细目录、执行者等。...-aux 除可显示 -ef 所有内容外,还可显示 CPU 及内存占用率、进程状态。 -w 以加宽方式显示,这样可以显示较多信息。...00:01:57 /usr/sbin/mysqld 04 — kill 而 kill 命令用于输出特定信号给指定进程号(PID)进程并根据该信号完成指定行为,其中可能信号有进程挂起、进程等待、...一次性计划任务只执行一次,一般用于满足临时工作需求。我们可以用at命令实现这种功能,只需要写成“at 时间形式就可以。...07 — crontab 我们希望 Linux 系统能够周期性地、有规律地执行某些具体任务,那么Linux 系统中默认启用 crond 服务简直再适合不过了 创建、编辑计划任务命令为“crontab

1.5K20

linux通过进程名杀死进程_linux关闭进程命令

笔记:根据一个进程名字或启动此进程命令(连续一部分即可)杀死进程 一、使用单条命令 ps -ef | grep 进程名/启动进程命令 | grep -v grep | awk ‘{print $2...}’ | xargs kill -9 执行结果: [1]-  已杀死               sleep 200 [2]+  已杀死               sleep 200 二、编写脚本 linux.../bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9     # 1通过ps查询进程id     # 2使用kill -9 强制终止进程...请使用此方式运行:/bin/bash kill_process.sh 进程名”     exit 1 fi # 获取要被杀死进程名 pName=$1 <<!    ...————————————————————— # 根据进程名查询包含进程进程 并排除grep查询进程和此脚本进程 ps -ef | grep “$pName” | grep -v grep | grep

15.9K20

linux中怎么知道进程运行了多长时间

你有没有遇到过想知道一个进程在你 Linux 机器上运行了多长时间情况? 你不需要任何监控应用程序。...在 Linux 和其他类 Unix 操作系统中,有一个名为 命令ps,用于显示有关活动进程信息。使用ps命令,我们可以很容易地找出一个进程Linux 中运行了多长时间。...查看一个进程Linux 中运行了多长时间 该ps命令具有不同格式说明符(关键字),可用于控制输出格式。我们将使用以下两个关键字来查找活动进程正常运行时间。...etime- 自进程启动以来经过时间,格式为[[DD-]hh:]mm:ss. etimes - 自进程启动以来经过时间,以秒为单位。 首先,你需要找出PID一个进程。...进程正常运行时间,后者以秒为单位显示正常运行时间

7.6K20

linux进程

1.查进程 ps命令查找与进程相关PID号: ps a 显示现行终端机下所有程序,包括其他用户程序。 ps -A 显示所有程序。...ps c 列出程序时,显示每个程序真正指令名称,而不包含路径,参数或常驻服务标示。 ps -e 此参数效果和指定"A"参数相同。 ps e 列出程序时,显示每个程序所使用环境变量。...ps s 采用程序信号格式显示程序状况。 ps S 列出程序时,包括已中断子程序资料。 ps -t 指定终端机编号,并列出属于该终端机程序状况。...2.杀进程和查看进程对应PID目录下exe文件信息 最常用方法是ps -aux或者ps -ef 然后再通过管道使用grep命令过滤查找特定进程,然后再对特定进程进行操作。...使用kill命令结束进程:kill -a 进程pid 或者 killall 程序名 查看对应PID目录下exe文件信息: [root@localhost postfix]# ps -aux|grep

8.6K100

Linux中查看进程、杀死进程、进入进程命令

2.杀死进程    使用kill命令结束进程:kill xxx    常用:kill -9 324    Linux下还提供了一个killall命令,可以直接使用进程名字而不是进程标识号,例如:...(1)强行中止(经常使用杀掉)一个进程标识号为324进程: #kill -9 324 (2)解除Linux系统死锁 在Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁状态。...(3)使用命令回收内存 我们知道内存对于系统是非常重要,回收内存可以提高系统资源。kill命令可以及时地中止一些“越轨”程序或很长时间没有相应程序。...(4)killall命令 Linux下还提供了一个killall命令,可以直接使用进程名字而不是进程标识号,例如: # killall -HUP inetd *杀死进程最安全方法是单纯使用kill...如下: # kill -HUP PID 该命令让Linux和缓执行进程关闭,然后立即重启。 *绝杀 kill -9 PID 同意 kill -s SIGKILL 。

11.3K30

Linux进程学习【进程状态】

,即把手机揣进兜里,然后 专心执行走路这个 进程 进程状态 进程 有各种运行状态,方便OS进行管理,在 Windows 中,进程 状态是这样 而在我们 Linux 中,新建、就绪、运行都可以看作...运行 R 这一个状态,所以比较清晰 而我们今天要学习正是 Linux 进程 状态 进程是何种状态,取决于此进程PCB在哪里排队 ️运行 R 首先来看看第一种状态 R 以我们以往认知来说...,查看当前进程信息 可以看到当前进程状态为 睡眠 S+ 注: + 表示当前进程在前台运行中 进程 难道没有运行吗?...运行了,但我们 很难捕捉到 对于 CPU 来说,将这么简单一句话输出到屏幕上是一件很小事,可能几毫秒就完成了 而其他大多数时间进程 都在外设等待队列中 排队 当我们将打印语句和睡眠语句屏蔽后,进程...不一定在 CPU 上运行 ️睡眠 S 睡眠 S 本质就是 进程阻塞,表示此时进程因等待某种资源而暂停运行;睡眠 S 又称为可中断休眠,当 进程 等待时间过长时,我们可以手动将其关闭,应用卡死后强制关闭也是这个道理

19930
领券