第四章 进程(4)进程的错误模式

 

4、进程的错误模式

与每个进程相关联的是一组标志,用于告诉系统,进程对严重的错误应该如何作出反映,

这包括磁盘介质故障、未处理的异常情况、文件查找失败和数据没有对齐等。进程可以告诉系统如何处理每一种错误。方法是调用SetErrorMode函数:

UINT SetErrorMode(UINT fuErrorMode);

fuErrorMode参数是下表的任何标志按位用O R连接在一起的组合

 

SEM_FAILCRITICALERRORS 系统不显示关键错误句柄消息框,将错误返回给调用进程

SEM_NOGPFAULTERRORBOX 系统不显示一般保护故障消息框。本标志只应该由采用异常情况处理程序来处理一般保护(G P)故障的调试应用程序来设定

SEM_NOOPENFILEERRORBOX 当系统找不到文件时,它不显示消息框。

SEM_NOALIGNMENTFAULTEXCEPT 系统自动排除内存没有对齐的故障,并使应用程序看不到这些故障。本标志对x 8 6处理器不起作用

 

默认情况下,子进程继承父进程的错误模式标志。父进程可以在调用CreateProcess时设定CREATE_DEFAULT_ERROR_MODE标志防止子进程继承它的错误模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Linux ,可以使用 `getrusage()` 函数获取进程的用户模式和内核模式时间。该函数需要传入一个 `struct rusage` 结构体指针作为参数,返回进程的系统资源使用情况,包括 CPU 时间、内存使用等。 具体实现方法如下: ```c #include <stdio.h> #include <sys/resource.h> int main() { struct rusage usage; int ret = getrusage(RUSAGE_SELF, &usage); if (ret == 0) { printf("User time: %ld.%06ld seconds\n", usage.ru_utime.tv_sec, usage.ru_utime.tv_usec); printf("System time: %ld.%06ld seconds\n", usage.ru_stime.tv_sec, usage.ru_stime.tv_usec); } else { printf("Error: getrusage() failed\n"); } return 0; } ``` 上述代码,`getrusage()` 函数的第一个参数 `RUSAGE_SELF` 表示获取当前进程的系统资源使用情况,第二个参数为 `struct rusage` 结构体指针,用于存储系统资源使用情况。`ru_utime` 表示用户模式时间,`ru_stime` 表示内核模式时间,单位均为微秒。 需要注意的是,`getrusage()` 函数的返回值为 0 表示成功,-1 表示失败。如果失败,可以通过 `errno` 变量获取具体的错误信息。 ### 回答2: 在Linux,可以使用定时器来获取进程的用户模式和内核模式时间。具体步骤如下: 首先,可以使用内核提供的`times()`函数来获取进程的时钟时间信息。该函数会返回一个`struct tms`的结构体,其`struct tms`包含了用户模式和内核模式的时间信息。 接下来,可以使用`clock()`函数来获取进程的时钟滴答数。这个函数返回一个时钟计数值,可以用来计算进程的运行时间。 然后,使用`sysconf(_SC_CLK_TCK)`来获取每秒钟的滴答数,也即系统时钟频率。 计算用户模式和内核模式时间的步骤如下: 1. 获取进程开始执行时的时钟计数值start。 2. 执行一段程序或操作后,获取当前的时钟计数值end。 3. 利用时钟频率,计算执行的滴答数ticks = end - start。 4. 计算用户模式时间user_time = ticks / sysconf(_SC_CLK_TCK)。 5. 通过调用`times()`函数,获取进程的时钟时间信息。 6. 计算内核模式时间kernel_time = tms.tms_stime / sysconf(_SC_CLK_TCK)。 最后,即可得到进程的用户模式和内核模式时间。 需要注意的是,由于`sysconf(_SC_CLK_TCK)`返回的值可能因系统而异,因此在计算时间时应注意进行适当的调整。此外,获取的时间单位通常为秒,根据需要可以进行转换成其他形式的时间表示。 总结起来,获取进程的用户模式和内核模式时间的步骤为:获取进程开始和结束时的时钟计数值,利用时钟频率计算滴答数,通过`sysconf(_SC_CLK_TCK)`获取时钟频率,最后计算出用户模式和内核模式时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值