![96ace2dc66407a6933e718e9856fabf9.png](https://i-blog.csdnimg.cn/blog_migrate/f5d827d21dcc6c6e7ca1f454fde37806.jpeg)
函数system
在程序中执行一个命令字符串。也就是在一个C程序中调用一行命令行。
#include
返回值
因为system在其实现中调用了fork、exec、waitpid,其实就是few的一个简单封装,因此有3种返回值。 1. fork失败或者waitpid返回除ENTER以外的错误,则system返回-1,并设置errno以指示错误类型 2. 如果exec失败(表示不能执行shell),则返回时如同shell执行了exit(127) 3. 否则所有3个函数都成功,那么system的返回值时shell的终止状态,其格式已在waitpid中说明。
system函数(不对信号处理)
#include
可以看到,其实就是一个简单的对fork、exec和waitpid的一个封装,从而让其执行命令行。
举例:调用system函数
#include
输出:
![9d63ae559e397fed5f1cd8114c7ae380.png](https://i-blog.csdnimg.cn/blog_migrate/0afe513c7256fe8d5d651c494d64bd68.jpeg)
16 进程调度
友好值
进程可以通过调整友好值选择以更低优先级哦运行(通过调整友好值降低它对CPU的战友,因此该进程是“友好的”)。只有特权进程允许提高调度权限。
调整友好值
进程可以通过nice函数获取或者更改它的友好值。使用这个函数,进程只能影响自己的友好值,不能影响其他任何进程的友好值
#include
若成功则返回新的友好值,若出错则返回-1. 参数incr被增加到调用进程的友好值上,如果incr太大,系统会直接把它降到最大合法值,不给出提示;如果太小会直接把它升到最小合法值
函数getpriority可以像nice那样获取进程的友好值,此外,它还可以获取一组相关进程的友好值。
#include
若成功返回友好值,失败返回-1. 参数选择: which:PRIO_PROCESS代表进程,PRIO_PGRP表示进程组,PRIO_USER表示用户ID。
函数setpriority可以为进程、进程组和属于特定用户ID的所有进程设置优先级。
#include
17 进程时间
最开始就说明了,我们可以度量3个时间:墙上时钟时间、用户CPU时间和系统CPU时间。任一进程都可调用times函数获得它自己以及已终止子进程的上述值。
#include
返回值: 若成功返回时钟滴答数,若出错返回-1 tms结构体:
struct
注意: 此结构体没有包含墙上时钟时间。times函数返回墙上时钟时间作为函数值。此值时相对于过去某一个时刻度量的,所以不能用其绝对值而必须使用其相对值。 例如: 调用times,保存其返回值。以后某个时间再次调用times,从新返回的值中减去以前返回的值,这个差值就是墙上时钟时间。 所有由times函数返回的clock_t值都用_SC_CLK_TCK(由sysconf函数返回的每秒时钟滴答数)转换成秒数。
实例
#include
执行结果:
![cd2e7653bbf5b7d52ea10a88c022c931.png](https://i-blog.csdnimg.cn/blog_migrate/e7f04d52f3cb21cfafddff2c046e9112.jpeg)