ce="宋体" size="2">
| ce="宋体" size="2"> nice(改变进程优先顺序) |
ce="宋体" size="2">相关函数
| ce="宋体" size="2">setpriorityc;getpriority
|
ce="宋体" size="2">表头文件
| ce="宋体" size="2">#include<unistd.h>
|
ce="宋体" size="2">定义函数
| ce="宋体" size="2">int nice(int inc);
|
ce="宋体" size="2">函数说明
| ce="宋体" size="2">nice()用来改变进程的进程执行优先顺序。参数inc数值越大则优先顺序排在越后面c;即表示进程执行会越慢。只有超级用户才能使用负的inc 值c;代表优先顺序排在前面c;进程执行会较快。
|
ce="宋体" size="2">返回值
| ce="宋体" size="2">如果执行成功则返回0c;否则返回-1c;失败原因存于errno中。
|
ce="宋体" size="2">错误代码
| ce="宋体" size="2">EPERM 一般用户企图转用负的参数inc值改变进程优先顺序。
|
ce="宋体" size="2">class="tags" href="/tags/LINUX.html" title=linux>linuxc191">
|
ce="宋体" size="2">
| ce="宋体" size="2"> on_exit(设置程序正常结束前调用的函数) |
ce="宋体" size="2">相关函数
| ce="宋体" size="2">_exitc;atexitc;exit
|
ce="宋体" size="2">表头文件
| ce="宋体" size="2">#include<stdlib.h>
|
ce="宋体" size="2">定义函数
| ce="宋体" size="2">int on_exit(void (* function)(int, void*),void *arg);
|
ce="宋体" size="2">函数说明
| ce="宋体" size="2">on_exit()用来设置一个程序正常结束前调用的函数。当程序通过调用exit()或从main中返回时c;参数function所指定的函数会先被调用c;然后才真正由exit()结束程序。参数arg指针会传给参数function函数c;详细情况请见范例。
|
ce="宋体" size="2">返回值
| ce="宋体" size="2">如果执行成功则返回0c;否则返回-1c;失败原因存于errno中。
|
ce="宋体" size="2">附加说明
| ce="宋体" size="2">
|
ce="宋体" size="2">范例
| ce="宋体" size="2">#include<stdlib.h> void my_exit(int status,void *arg) { printf(“before exit()!/n”); printf(“exit (%d)/n”,status); printf(“arg = %s/n”,(char*)arg); } main() { char * str=”test”; on_exit(my_exit,(void *)str); exit(1234); }
|
ce="宋体" size="2">执行
| ce="宋体" size="2">before exit()! exit (1234) arg = test
|
ce="宋体" size="2">class="tags" href="/tags/LINUX.html" title=linux>linuxc192">
|
ce="宋体" size="2">
| ce="宋体" size="2"> setpgid(设置进程组识别码) |
ce="宋体" size="2">相关函数
| ce="宋体" size="2">getpgidc;setpgrpc;getpgrp
|
ce="宋体" size="2">表头文件
| ce="宋体" size="2">#include<unistd.h>
|
ce="宋体" size="2">定义函数
| ce="宋体" size="2">int setpgid(pid_t pid,pid_t pgid);
|
ce="宋体" size="2">函数说明
| ce="宋体" size="2">setpgid()将参数pid 指定进程所属的组识别码设为参数pgid 指定的组识别码。如果参数pid 为0c;则会用来设置目前进程的组识别码c;如果参数pgid为0c;则会以目前进程的进程识别码来取代。
|
ce="宋体" size="2">返回值
| ce="宋体" size="2">执行成功则返回组识别码c;如果有错误则返回-1c;错误原因存于errno中。
|
ce="宋体" size="2">错误代码
| ce="宋体" size="2">EINVAL 参数pgid小于0。 EPERM 进程权限不足c;无法完成调用。 ESRCH 找不到符合参数pid指定的进程。
|
ce="宋体" size="2">class="tags" href="/tags/LINUX.html" title=linux>linuxc193">
|
ce="宋体" size="2">
| ce="宋体" size="2"> setpgrp(设置进程组识别码) |
ce="宋体" size="2">相关函数
| ce="宋体" size="2">getpgidc;setpgidc;getpgrp
|
ce="宋体" size="2">表头文件
| ce="宋体" size="2">#include<unistd.h>
|
ce="宋体" size="2">定义函数
| ce="宋体" size="2">int setpgrp(void);
|
ce="宋体" size="2">函数说明
| ce="宋体" size="2">setpgrp()将目前进程所属的组识别码设为目前进程的进程识别码。此函数相当于调用setpgid(0,0)。
|
ce="宋体" size="2">返回值
| ce="宋体" size="2">执行成功则返回组识别码c;如果有错误则返回-1c;错误原因存于errno中。
|
ce="宋体" size="2">class="tags" href="/tags/LINUX.html" title=linux>linuxc194">
|
ce="宋体" size="2">
| ce="宋体" size="2"> setpriority(设置程序进程执行优先权) |
ce="宋体" size="2">相关函数
| ce="宋体" size="2">getpriorityc;nice
|
ce="宋体" size="2">表头文件
| ce="宋体" size="2">#include<sys/time.h> #include<sys/resource.h>
|
ce="宋体" size="2">定义函数
| ce="宋体" size="2">int setpriority(int which,int who, int prio);
|
ce="宋体" size="2">函数说明
| ce="宋体" size="2">setpriority()可用来设置进程、进程组和用户的进程执行优先权。参数which有三种数值c;参数who 则依which值有不同定义 which who 代表的意义 PRIO_PROCESS who为进程识别码 PRIO_PGRP who 为进程的组识别码 PRIO_USER who为用户识别码 参数prio介于-20 至20 之间。代表进程执行优先权c;数值越低代表有较高的优先次序c;执行会较频繁。此优先权默认是0c;而只有超级用户(root)允许降低此值。
|
ce="宋体" size="2">返回值
| ce="宋体" size="2">执行成功则返回0c;如果有错误发生返回值则为-1c;错误原因存于errno。 ESRCH 参数which或who 可能有错c;而找不到符合的进程 EINVAL 参数which值错误。 EPERM 权限不够c;无法完成设置 EACCES 一般用户无法降低优先权
|
ce="宋体" size="2">class="tags" href="/tags/LINUX.html" title=linux>linuxc195">
|
ce="宋体" size="2">
| ce="宋体" size="2"> system(执行shell 命令) |
ce="宋体" size="2">相关函数
| ce="宋体" size="2">forkc;execvec;waitpidc;popen
|
ce="宋体" size="2">表头文件
| ce="宋体" size="2">#include<stdlib.h>
|
ce="宋体" size="2">定义函数
| ce="宋体" size="2">int system(const char * string);
|
ce="宋体" size="2">函数说明
| ce="宋体" size="2">system()会调用fork()产生子进程c;由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令c;此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置c;SIGINT和SIGQUIT 信号则会被忽略。
|
ce="宋体" size="2">返回值
| ce="宋体" size="2">如果system()在调用/bin/sh时失败则返回127c;其他失败原因返回-1。若参数string为空指针(NULL)c;则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值c;但是此返回值也有可能为system()调用/bin/sh失败所返回的127c;因此最好能再检查errno 来确认执行成功。
|
ce="宋体" size="2">附加说明
| ce="宋体" size="2">在编写具有SUID/SGID权限的程序时请勿使用system()c;system()会继承环境变量c;通过环境变量可能会造成系统安全的问题。
|
ce="宋体" size="2">范例
| ce="宋体" size="2">#include<stdlib.h> main() { system(“ls -al /etc/passwd /etc/shadow”); }
|
ce="宋体" size="2">执行
| ce="宋体" size="2">-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd -r--------- 1 root root 572 Sep 2 15 :34 /etc/shadow
|
ce="宋体" size="2">class="tags" href="/tags/LINUX.html" title=linux>linuxc196">
|
ce="宋体" size="2">
| ce="宋体" size="2"> wait(等待子进程中断或结束) |
ce="宋体" size="2">相关函数
| ce="宋体" size="2">waitpidc;fork
|
ce="宋体" size="2">表头文件
| ce="宋体" size="2">#include<sys/types.h> #include<sys/wait.h>
|
ce="宋体" size="2">定义函数
| ce="宋体" size="2">pid_t wait (int * status);
|
ce="宋体" size="2">函数说明
| ce="宋体" size="2">wait()会暂时停止目前进程的执行c;直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束c;则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status 返回c;而子进程的进程识别码也会一快返回。如果不在意结束状态值c;则
|
ce="宋体" size="2">参数
| ce="宋体" size="2">status可以设成NULL。子进程的结束状态值请参考waitpid()。
|
ce="宋体" size="2">返回值
| ce="宋体" size="2">如果执行成功则返回子进程识别码(PID)c;如果有错误发生则返回-1。失败原因存于errno中。
|
ce="宋体" size="2">附加说明
| ce="宋体" size="2">
|
ce="宋体" size="2">范例
| ce="宋体" size="2">#include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/wait.h> main() { pid_t pid; int status,i; if(fork()= =0){ printf(“This is the child process .pid =%d/n”,getpid()); exit(5); }else{ sleep(1); printf(“This is the parent process ,wait for child.../n”; pid=wait(&status); i=WEXITSTATUS(status); printf(“child’s pid =%d .exit status=^d/n”,pid,i); } }
|
ce="宋体" size="2">执行
| ce="宋体" size="2">This is the child process.pid=1501 This is the parent process .wait for child... child’s pid =1501,exit status =5
|
ce="宋体" size="2">class="tags" href="/tags/LINUX.html" title=linux>linuxc197">
|
ce="宋体" size="2">
| ce="宋体" size="2"> waitpid(等待子进程中断或结束) |
ce="宋体" size="2">相关函数
| ce="宋体" size="2">waitc;fork
|
ce="宋体" size="2">表头文件
| ce="宋体" size="2">#include<sys/types.h> #include<sys/wait.h>
|
ce="宋体" size="2">定义函数
| ce="宋体" size="2">pid_t waitpid(pid_t pid,int * status,int options);
|
ce="宋体" size="2">函数说明
| ce="宋体" size="2">waitpid()会暂时停止目前进程的执行c;直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束c;则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status返回c;而子进程的进程识别码也会一快返回。如果不在意结束状态值c;则参数status可以设成NULL。参数pid为欲等待的子进程识别码c;其他数值意义如下: pid<-1 等待进程组识别码为pid绝对值的任何子进程。 pid=-1 等待任何子进程c;相当于wait()。 pid=0 等待进程组识别码与目前进程相同的任何子进程。 pid>0 等待任何子进程识别码为pid的子进程。 参数option可以为0 或下面的OR 组合 WNOHANG 如果没有任何已经结束的子进程则马上返回c;不予以等待。 WUNTRACED 如果子进程进入暂停执行情况则马上返回c;但结束状态不予以理会。 子进程的结束状态返回后存于statusc;底下有几个宏可判别结束情况 WIFEXITED(status)如果子进程正常结束则为非0值。 WEXITSTATUS(status)取得子进程exit()返回的结束代码c;一般会先用WIFEXITED 来判断是否正常结束才能使用此宏。 WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真 WTERMSIG(status)取得子进程因信号而中止的信号代码c;一般会先用WIFSIGNALED 来判断后才使用此宏。 WIFSTOPPED(status)如果子进程处于暂停执行情况则此宏值为真。一般只有使用WUNTRACED 时才会有此情况。 WSTOPSIG(status)取得引发子进程暂停的信号代码c;一般会先用WIFSTOPPED 来判断后才使用此宏。
|
ce="宋体" size="2">返回值
| ce="宋体" size="2">如果执行成功则返回子进程识别码(PID)c;如果有错误发生则返回-1。失败原因存于errno中。
|
ce="宋体" size="2">范例
| ce="宋体" size="2">参考wait()。
|