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

linux "clock()“函数是否计入进程的”睡眠“时间?

clock() 函数在 Linux 系统中用于获取进程运行的 CPU 时间,它测量的是进程在用户态和内核态中执行指令所花费的时间。clock() 函数返回的时间单位是 CLOCKS_PER_SEC,通常等于系统的时钟频率。

clock() 函数不会计入进程的“睡眠”时间。当进程进入睡眠状态时(例如,等待 I/O 操作完成),它不会消耗 CPU 时间,因此 clock() 函数返回的时间不会增加。只有当进程实际执行指令时,clock() 函数返回的时间才会增加。

如果你需要测量进程的总运行时间(包括睡眠时间),可以使用 getrusage()times() 函数。这些函数提供了更全面的进程时间信息,包括用户态时间、内核态时间以及睡眠时间。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

1 Linux 进程睡眠和唤醒 在 Linux 中,仅等待 CPU 时间进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程状 态标志位为 TASK_RUNNING。...一旦一个运行中进程时间片用完, Linux 内核调度器会剥夺这个进程对 CPU 控制权,并且从运行队列中选择一个合适进程投入运行。 当然,一个进程也可以主动释放 CPU 控制权。...我们可以使用下面的这个函数将刚才那个进入睡眠进程唤醒。...在这个时间片内,B 进程执行完了它所有的指令,因此它试图唤醒 A 进程,而此时 A 进程还没有进入睡眠,所以唤醒操作无效。...这样无论进程等待条件是否满足, 进程都不会因为被移出就绪队列而错误地进入睡眠状态,从而避免了无效唤醒问题。

2.3K90

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

1 Linux 进程睡眠和唤醒 在Linux 中,仅等待 CPU 时间进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程状 态标志位为 TASK_RUNNING。...一旦一个运行中进程时间片用完, Linux 内核调度器会剥夺这个进程对 CPU 控制权,并且从运行队列中选择一个合适进程投入运行。 当然,一个进程也可以主动释放 CPU 控制权。...我们可以使用下面的这个函数将刚才那个进入睡眠进程唤醒。...在这个时间片内,B 进程执行完了它所有的指令,因此它试图唤醒 A 进程,而此时 A 进程还没有进入睡眠,所以唤醒操作无效。...这样无论进程等待条件是否满足, 进程都不会因为被移出就绪队列而错误地进入睡眠状态,从而避免了无效唤醒问题。

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

    当任务睡眠完成,定时器超时,会调用之前在__hrtimer_init_sleeper设置超时回调函数hrtimer_wakeup将睡眠任务唤醒(关于进程唤醒在这里就不在赘述,在后面的进程唤醒专题文章在进行详细解读...总结:处于用户态任务,如果想要睡眠一段时间必须向内核请求服务(如调用clock_nanosleep系统调用),内核中会设置一个高精度定时器,来记录要睡眠任务,然后设置任务状态为可中断睡眠状态,紧接着发生主动调度...5.内核态睡眠 当任务处于内核态时,有时候也需要睡眠一段时间,不像任务处于用户态需要发生系统调用来请求内核进行睡眠,在内核态可以直接调用睡眠函数。...6.总结 进程睡眠按照应用场景可以分为:延迟睡眠和等待某些特定条件而睡眠,实际上都可以归于等待某些特定条件而睡眠,因为延迟特定时间也可以作为特定条件。...进程睡眠按照进程所处特权级别可以分为:用户态进程睡眠和内核态进程睡眠,用户态进程睡眠需要进程通过系统调用陷入内核来发起睡眠请求。

    2.1K20

    Linux下通过grep查找指定进程是否存在

    一、功能介绍 Linux通过命令查找指定进程是否存在,并返回该进程PID号。 在程序中可以使用该方法监控指定程序是否在运行,如果异常退出,可以重新启动指定程序或者系统。...二、执行命令 2.1 shell脚本代码 #查找指定进程PID find_name=s_app #s_app就是要查找进程名称 pid_val=`ps -ef | grep $find_name..."查找进程不存在" fi 2.2 C语言代码 #include #include #include //查找指定进程PID号并返回...\n"); } else { printf("查找进程PID=%d\n",pid); } return 0; } 三、检测指定程序是否存在,不存在就重新启动...$2}'` if [ ${pid_val} > 0 ] then echo "查找进程存在" else echo "查找进程不存在" #重新启动 /mnt/hgfs/linux-share-dir

    4.3K40

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

    当任务睡眠完成,定时器超时,会调用之前在__hrtimer_init_sleeper设置超时回调函数hrtimer_wakeup将睡眠任务唤醒(关于进程唤醒在这里就不在赘述,在后面的进程唤醒专题文章在进行详细解读...总结:处于用户态任务,如果想要睡眠一段时间必须向内核请求服务(如调用clock_nanosleep系统调用),内核中会设置一个高精度定时器,来记录要睡眠任务,然后设置任务状态为可中断睡眠状态,紧接着发生主动调度...5.内核态睡眠 当任务处于内核态时,有时候也需要睡眠一段时间,不像任务处于用户态需要发生系统调用来请求内核进行睡眠,在内核态可以直接调用睡眠函数。...6.总结 进程睡眠按照应用场景可以分为:延迟睡眠和等待某些特定条件而睡眠,实际上都可以归于等待某些特定条件而睡眠,因为延迟特定时间也可以作为特定条件。...进程睡眠按照进程所处特权级别可以分为:用户态进程睡眠和内核态进程睡眠,用户态进程睡眠需要进程通过系统调用陷入内核来发起睡眠请求。

    2.8K40

    详解Linux内核进程调度函数schedule()触发和执行时机

    内核调度操作分为触发和执行两个部分,触发时仅仅设置一下当前进程TIF_NEED_RESCHED标志,执行时候则是通过schedule()函数来完成进程选择和切换。...负载和当前任务运行时间统计等,如下所示: //linux-3.13/kernel/sched/core.c void scheduler_tick(void) { int cpu = smp_processor_id...需要注意是,此处仅仅是设置标志而没有执行schedule()函数,在各种系统调用、中断返回代码最后,才会根据这个标志来决定是否执行schedule()函数。...睡眠任务被唤醒时: 当睡眠任务所等待事件到达时,内核(例如驱动程序中断处理函数)将会调用wake_up()唤醒相关任务,并最终调用try_to_wake_up()。...)函数(从效率方面考虑,趁着还在内核态把该处理事情处理完毕);第二种情况是当前任务因为原因需要睡眠进程睡眠后立即调用schedule()函数,在内核中这种情况也比较多,比如磁盘、网卡等设备驱动程序中

    2.5K10

    Linux唤醒抢占----Linux进程管理与调度(二十三)

    新唤醒进程不必一定由完全公平调度器处理, 如果新进程是一个实时进程, 则会立即请求调度, 因为实时进程优先极高, 实时进程总会抢占CFS进程. 2 Linux进程睡眠Linux中,仅等待CPU时间进程称为就绪进程...一旦一个运行中进程时间片用完, Linux 内核调度器会剥夺这个进程对CPU控制权, 并且从运行队列中选择一个合适进程投入运行. 当然,一个进程也可以主动释放CPU控制权....Linux进程睡眠状态有两种 一种是可中断睡眠状态,其状态标志位TASK_INTERRUPTIBLE....在Linux操作系统中, 内核稳定性至关重要, 为了避免在Linux操作系统内核中出现无效唤醒问题, Linux内核在需要进程睡眠时候应该使用类似如下操作: /* ‘q’是我们希望睡眠等待队列...2号进程例子-避免无效抢占 下面让我们用linux内核中实例来看看Linux 内核是如何避免无效睡眠, 我还记得2号进程吧, 它主要工作就是接手内核线程kthread创建, 其工作流程函数

    3.9K30

    Linux核心调度器之周期性调度器scheduler_tick--Linux进程管理与调度(十八)

    我们前面提到linux有两种方法激活调度器:核心调度器和 周期调度器 一种是直接, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性机制, 以固定频率运行, 不时检测是否有必要 因而内核提供了两个调度器主调度器...-0.11~2.4 O(1)调度器 linux-2.5 CFS调度器 linux-2.6~至今 1.4 Linux调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接, 比如进程打算睡眠或出于其他原因放弃...其间执行主要操作是对各种计数器+1 激活负责当前进程调度类周期性调度方法 检查进程执行时间是否超过了它对应ideal_runtime,如果超过了,则告诉系统,需要启动主调度器(schedule)...(&rq->lock); /* 2.1 更新rq的当前时间戳.即使rq->clock变为当前时间戳 */ update_rq_clock(rq); /* 2.2 执行当前运行进程所在调度类...(scheduler_tick)完成该cpu上任务周期性调度工作; 在支持动态定时器系统中,可以关闭该调度器,从而进入深度睡眠过程;scheduler_tick查看当前进程是否运行太长时间,如果是,

    2.7K20

    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.3K10

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

    但这是被动,不是进程控制,也就是说,进程访问一个资源时候,如果不能被满足,进程会被系统挂起,等到条件满足时候,系统会唤起进程。 今天介绍是一种进程主动睡眠能力。...即进程自己让自己挂起,等到一定时间后,被系统唤醒(时间到或者收到信号)。这个能力由sleep函数提供。...unsigned int sleep(unsigned int seconds); 这个函数可以让进程自己挂起seconds秒。我们看看这个函数一些说明。...即sleep函数是由操作系统[nanosleep](http://www.man7.org/linux/man-pages/man2/nanosleep.2.html)函数实现。...__data是在 timer.data = (unsigned long) current; 中设置。这就是进程主动睡眠(sleep)大致原理。

    1.3K10

    Linux内核时钟系统和定时器实现

    () alarm: alarm()函数可以设置一个定时器,在特定时间超时,并产生SIGALRM信号,如果不忽略或不捕捉该信号,该进程会被终止。...那么sleep是如何实现?Glibcsleep实现如下:可见其实调用alarm实现,在alarm基础上注册了SIGALRM信号处理函数,用于在定时器到期时,捕获到信号,回到睡眠地方。...参数clock_id用来指定定时器时钟类型,时钟类型有以下6种: CLOCK_REALTIME:系统实时时间,即日历时间CLOCK_MONOTONIC:从系统启动开始到现在为止时间CLOCK_PROCESS_CPUTIME_ID...:本进程启动到执行到当前代码,系统CPU花费时间CLOCK_THREAD_CPUTIME_ID:本线程启动到执行到当前代码,系统CPU花费时间CLOCK_REALTIME_HR:CLOCK_REALTIME...基于周期性睡眠定时器系统,每次只需遍历堆顶定时器是否到期,即可。堆顶定时器超时后,继续调整堆,使其保持为小根堆并同时对堆顶定时器进行超时判断。

    3.6K30

    Linux common clock framework(1)_概述

    2)实现clock控制通用逻辑,这部分和硬件无关。 3)将和硬件相关clock控制逻辑封装成操作函数集,交由底层platform开发者实现,由通用逻辑调用。...); 第二篇为底层操作函数解析和使用说明,面向读者是platform clock driver开发者,目的是掌握怎么借助clock framework管理系统时钟资源; 第三篇为clock framework...内部逻辑解析,面向读者是linux kernel爱好者,目的是理解怎么实现clock framework。...很长一段时间内,kernel及driver就是使用这种方式管理和使用clock。...而PLL稳定时间是很长,这段时间要把CPU交出(进程睡眠),不然就会浪费CPU。 最后,为什么会有合在一起clk_prepare_enable/clk_disable_unprepare接口呢?

    94830

    UNIX 高级环境编程 实验一 同步与异步write效率比较

    显示时间应当尽量接近write操作过程所花时间。不要将从磁盘读文件时间计入显示结果中。 ​ 实验要求程序必须指定输出文件名,而该文件是否按同步方式打开,则是可以选择。.../timewrite <f1 f2 ​ 来说,这个argc[0]即为函数名,重定向符后跟着是不计入argc参数数目及argc[]数组,此时argc[1]=f2 ​ 对于执行代码 ..../timewrite f1 sync <f2 ​ 来说,这个argc[0]即为函数名,重定向符连带之后跟着是不计入argc参数数目及argc[]数组,此时argc[1]=f1,agrc[2]=“...考虑到可能有剩余,那么就需要特殊判断一下,最后是否需要多一次读入,注意开始计时是选定一个buffSize之后,然后在所有文件内容全部读入之后结束计时,利用tms结构体获得进程用户、系统所使用CPU时间...,以及详细区别(从原理上了解),虽说之前上过linux基础编程课,但面对第一次实验课,我在一开始还是束手无策,只能翻书、上网查阅资料看看他人思路,最终在自己复现一遍,最终还是感觉收获了不少(真话)

    1.3K20

    linux系统编程之信号(二):一些信号发送函数和不同精度睡眠

    sig); kill命令是调用kill函数实现,kill函数可以给一个指定进程进程组发送指定信号,其中kill 函数pid 参数取值不同表示不同含义,具体可man 一下。...raise函数可以给当前进程发送指定信号(自己给自己发信号)。killpg 函数可以给进程组发生信号。这三个函数都是成功返回0,错误返回-1。...这里需要注意是输出两次recv之后继续睡眠时间是不一定,也有可能是5s,即信号处理函数在调用sleep之前已经被调用(子进程先被系统调度执行),sleep未被中断。...这个函数返回值是0或者是以前设定闹钟时间还余下秒数。...三、setitimer 和不同精度睡眠 1、首先来看三种不同时间结构,如下: time_t; /* seconds */ struct timeval { long    tv_sec;

    1.2K00

    Linux CFS调度器之虚拟时钟vruntime与调度延迟--Linux进程管理与调度(二十六)

    line 249 rq_clock_task函数返回了运行队列clock_task成员. /* rq_of -=> return cfs_rq->rq 返回cfs队列所在全局就绪队列 * rq_clock_task...我们也会讲到为什么这么有用一个函数会被移除 我们可以在早期linux-2.6.30(仅有entity_key函数)和linux-2.6.32(定义了entity_key和entity_befire...因为越重要进程vruntime增加越慢, 因此他们向右移动速度也越慢, 这样其被调度机会要大于次要进程, 这刚好是我们需要 如果进程进入睡眠, 则其vruntime保持不变....因为每个队列min_vruntime同时会单调增加, 那么当进程睡眠中苏醒, 在红黑树中位置会更靠左, 因为其键值相对来说变得更小了....entity_before来实现此功能, 函数定义在linux+v2.6.32/kernel/sched_fair.c, line 269, 在我们新linux-4.6内核中定义在kernel/sched

    3.2K63

    Android Handler机制3之SystemClock类

    该时钟是被保证为单调,并且适用当间隔不跨越设备睡眠时间间隔定时。大多数方法接受时间值就像uptimeMillis()方法。...该时钟可以被使用在当测量事件可能跨越系统睡眠时间段。...使用该函数产生延迟如果你不使用Thread.interrupt(),因为它会保存线程中断状态。 在android.os.Handler类中执行异步调用使用会用到一个绝对时间或者相对时间概念。...上面提到了一个概念"关于Android深度睡眠",这里就简单介绍下: 1、Android深度睡眠 所以Android深度睡眠,即屏幕关闭后,一段时间不做任何操作,不连接USB,然后在一定时间后...,手机很多服务、进程睡眠了,不再运行了。

    1.4K20

    x86 Linux 下实现 10us 误差高精度延时 | 软件开发

    当时验证结果也很满意,于是兴冲冲告诉领导说方案可行,殊不知自己挖了一个巨大坑…… 实际项目开始时候,发现这个方案根本行不通,有两个原因: 信号通知只能通知到进程,而目前移植方案无法做到被通知进程中无其他线程...这样高频信号发过来,其他线程基本上都会被干掉。(补充说明:这里特指的是内核驱动通知到应用层,在用户层中是有专门函数可以通知不同线程。...总结下来我大致进行了如下尝试: 1、sleep方案的确定 尝试过 usleep、nanosleep、clock_nanosleep、cond_timedwait、select 等,最终确定用 clock_nanosleep...而用 clock_nanosleep 好处就是一方面它可以选择时钟源,其次就是它支持绝对时间唤醒,这样我在每次 do_work 之前都设置一下 clock_nanosleep 下一次唤醒时绝对时间,...那么 clock_nanosleep 实际执行时间其实就会减去 do_work 开销,相当于是闹钟概念。

    66220
    领券