时间:2021-05-23
Linux进程控制详解及实例
常用函数:
进程的建立
如果fork()调用成功,就会使内核建立一个新的进程,所建的新进程是调用fork()进程的副本。也就是说,新的进程运行与其创建者一样的程序,其中的变量具有与创建进程变量相同的值。
系统调用fork()没有参数,它返回一个pid_t类型的值pid。pid被用来区分父进程和子进程。在父进程中pid被置为一个非0的正整数;在子进程中,pid被置为0。
进程的运行
exec系列调用:
int execl(const char* path, const char *arg, ...); int execlp(const char * file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char * const envp[]); int execv(const char* path, char *const argv[]); int execvp(const char* file, char * const argv[]);由于参数的个数是任意的,所以必须用一个null指针来标记参数表的结尾。下面给出一个使用execl()和execv()调用来运行ls的例子:
#include <stdio.h>#include <unistd.h>main(){ printf("Excuting ls\n"); execl("/bin/ls", "ls", "-l", NULL); perror("execl failed to run ls"); exit(1);}#include <stdio.h>#include <unistd.h>main(){ char *cmd[]={"ls", "-l", NULL}; execv("/bin/ls", cmd); perror("execv failed"); exit(1);}系统调用execlp()和execvp()分别类似于系统调用execl()和execv(),它们的主要区别是:execlp()和execvp()的第一个参数指向的是一个简单的文件名,而不是一个路径名。它们通过检索shell环境变量PATH指出的目录,来得到该文件名的路径前缀部分。
exec和fork()的联用
通过联用可以实现父进程运行一个与其不同的子进程,并且父进程不会被覆盖。下面给出一个 exec和fork()联用的例子:
#include <stdio.h>#include <unistd.h>main(){ int pid; pid = fork(); switch(pid){ case -1: perror("fork failed."); exit(1); case 0: execl("/bin/ls", "ls", "-l", NULL); perror("execl failed."); exit(1); default: wait(NULL); printf("ls completed.\n"); exit(0); }}在fork()调用之前,只有一个进程A,fork()调用后就有了进程A和B。A是父进程,它正在执行系统调用wait(),使进程A睡眠,直至进程B结束。同时进程B正在用execl装入命令ls。exec调用后,进程B的程序被ls的代码取代,执行ls命令的代码。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP实现的多进程控制。分享给大家供大家参考,具体如下:自己写了个多进程控制的框架代码,留着备查declare(ticks=1);function
Linux中多线程详解及简单实例1.概念进程:运行中的程序。线程:一个程序中的多个执行路径。更准确的定义是:线程是一个进程内部的一个控制序列。2.为什么要有线程
linux下的C\C++多进程多线程编程实例详解1、多进程编程#include#include#includeintmain(){pid_tchild_pid;
本文实例讲述了PHP多进程。分享给大家供大家参考,具体如下:PHP创建多进程需要使用到pcntl模块在编译时加上--enable-pcntl打开进程控制支持,不
VNC是一款优秀的远程控制工具软件,那么VNC在Linux系统下怎么进行远程控制呢?下面小编给大家带来VNC在Linux系统远程桌面图文教程,一起来了解下吧。V