| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

linux C 进程操作篇

时间:2006-06-24 13:59:11  来源:Linux联盟收集  作者:Linux联盟收集
V挥谐队没Р拍苁褂酶旱膇nc 值,代表优先顺序排在前面,进程执行会较快。VcgLinux联盟
返回值
如果执行成功则返回0,否则返回-1,失败原因存于errno中。VcgLinux联盟
错误代码
EPERM 一般用户企图转用负的参数inc值改变进程优先顺序。VcgLinux联盟
 
VcgLinux联盟
VcgLinux联盟
VcgLinux联盟
on_exit(设置程序正常结束前调用的函数)
相关函数
_exit,atexit,exitVcgLinux联盟
表头文件
#include<stdlib.h>VcgLinux联盟
定义函数
int on_exit(void (* function)(int, void*),void *arg);VcgLinux联盟
函数说明
on_exit()用来设置一个程序正常结束前调用的函数。当程序通过调用exit()或从main中返回时,参数function所指定的函数会先被调用,然后才真正由exit()结束程序。参数arg指针会传给参数function函数,详细情况请见范例。VcgLinux联盟
返回值
如果执行成功则返回0,否则返回-1,失败原因存于errno中。VcgLinux联盟
附加说明
VcgLinux联盟
范例
#include<stdlib.h>VcgLinux联盟
void my_exit(int status,void *arg)VcgLinux联盟
{VcgLinux联盟
printf(“before exit()!n”);VcgLinux联盟
printf(“exit (%d)n”,status);VcgLinux联盟
printf(“arg = %sn”,(char*)arg);VcgLinux联盟
}VcgLinux联盟
main()VcgLinux联盟
{VcgLinux联盟
char * str=”test”;VcgLinux联盟
on_exit(my_exit,(void *)str);VcgLinux联盟
exit(1234);VcgLinux联盟
}VcgLinux联盟
执行
before exit()!VcgLinux联盟
exit (1234)VcgLinux联盟
arg = testVcgLinux联盟
 
VcgLinux联盟
VcgLinux联盟
VcgLinux联盟
setpgid(设置进程组识别码)
相关函数
getpgid,setpgrp,getpgrpVcgLinux联盟
表头文件
#include<unistd.h>VcgLinux联盟
定义函数
int setpgid(pid_t pid,pid_t pgid);VcgLinux联盟
函数说明
setpgid()将参数pid 指定进程所属的组识别码设为参数pgid 指定的组识别码。如果参数pid 为0,则会用来设置目前进程的组识别码,如果参数pgid为0,则会以目前进程的进程识别码来取代。VcgLinux联盟
返回值
执行成功则返回组识别码,如果有错误则返回-1,错误原因存于errno中。VcgLinux联盟
错误代码
EINVAL 参数pgid小于0。VcgLinux联盟
EPERM 进程权限不足,无法完成调用。VcgLinux联盟
ESRCH 找不到符合参数pid指定的进程。VcgLinux联盟
 
VcgLinux联盟
VcgLinux联盟
VcgLinux联盟
setpgrp(设置进程组识别码)
相关函数
getpgid,setpgid,getpgrpVcgLinux联盟
表头文件
#include<unistd.h>VcgLinux联盟
定义函数
int setpgrp(void);VcgLinux联盟
函数说明
setpgrp()将目前进程所属的组识别码设为目前进程的进程识别码。此函数相当于调用setpgid(0,0)。VcgLinux联盟
返回值
执行成功则返回组识别码,如果有错误则返回-1,错误原因存于errno中。VcgLinux联盟
 
VcgLinux联盟
VcgLinux联盟
VcgLinux联盟
setpriority(设置程序进程执行优先权)
相关函数
getpriority,niceVcgLinux联盟
表头文件
#include<sys/time.h>VcgLinux联盟
#include<sys/resource.h>VcgLinux联盟
定义函数
int setpriority(int which,int who, int prio);VcgLinux联盟
函数说明
setpriority()可用来设置进程、进程组和用户的进程执行优先权。参数which有三种数值,参数who 则依which值有不同定义VcgLinux联盟
which who 代表的意义VcgLinux联盟
PRIO_PROCESS who为进程识别码VcgLinux联盟
PRIO_PGRP who 为进程的组识别码VcgLinux联盟
PRIO_USER who为用户识别码VcgLinux联盟
参数prio介于-20 至20 之间。代表进程执行优先权,数值越低代表有较高的优先次序,执行会较频繁。此优先权默认是0,而只有超级用户(root)允许降低此值。VcgLinux联盟
返回值
执行成功则返回0,如果有错误发生返回值则为-1,错误原因存于errno。VcgLinux联盟
ESRCH 参数which或who 可能有错,而找不到符合的进程VcgLinux联盟
EINVAL 参数which值错误。VcgLinux联盟
EPERM 权限不够,无法完成设置VcgLinux联盟
EACCES 一般用户无法降低优先权VcgLinux联盟
 
VcgLinux联盟
VcgLinux联盟
VcgLinux联盟
system(执行shell 命令)
相关函数
fork,execve,waitpid,popenVcgLinux联盟
表头文件
#include<stdlib.h>VcgLinux联盟
定义函数
int system(const char * string);VcgLinux联盟
函数说明
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。VcgLinux联盟
返回值
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。VcgLinux联盟
附加说明
在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。VcgLinux联盟
范例
#include<stdlib.
 4/8   |‹ ‹‹ 2 3 4 5 6 7 ›› ›|

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目更新
栏目热门