Linux 进程控制--- 编程 --- getpid --- fork --- exec --- system --- wait
来源:互联网 发布:亚索腥红之月皮肤 知乎 编辑:程序博客网 时间:2024/05/16 11:00
获取 ID - getpid :
#include < sys/types.h >
#include < unistd.h >
pid_t getpid ( void )
获取本进程 ID .
pid_t getppid ( void )
获取父进程 ID .
进程创建- fork:
#include < unistd.h >
pid_t fork ( void )
功能:创建子进程.
fork 的奇妙之处在于它被调用一次,却返回两次,它可能有三种不同的返回值.
1,在父进程中,fork 返回新创建的子进程的 PID .
2,在子进程中,fork 返回0.
3,如果出现错误,fork 返回一次负值.
在 pid = fork() 之前,只有一个进程在执行,但在这条语句执行之后,就变成两个进程在执行了,
这两个进程共享代码段,两个进程中,原来就存在的那个进程被称作“父进程”,新出现的那个进程被
称作“子进程”,父子进程的区别在于进程的标识符 ( PID ) 不同.
pid_t pid;
count = 0;
pid = fork();
count++;
printf ( "count = %d\n",count );
输出:
count = 1;
count = 1;
count ++ 被父子进程一共执行了两次,为什么 count 的第二次输出不为 2 ?
解释:
子进程的数据空间,堆栈空间都会从父进程得到一个拷贝,而不是共享.
在子进程进行加一操作并不会影响父进程.
进程创建- vfork:
#include < sys/types.h > #include < unistd.h >
pid_t vfork (void)
功能:创建子进程.
fork 区别 vfork:
1,fork :子进程拷贝父进程的数据段.
vfork:子进程共享父进程共享数据段.
2,fork :父,子进程的执行次序不确定.
vfork:子进程先运行,父进程后运行.
exec 函数族:
exec 用于 被执行的程序 替换 调用它的程序 .
fork 区别 exec :
fork 创建一个新的进程,产生一个新的 PID .
exec 启动一个新程序,替换原有的进程,因此进程的 PID 不会改变.
exec 函数族- execl :
函数: int execl (const char * path , const char * arg1 , ....)参数:
path :被执行程序名,需包含完整路径 .
arg1 - argn : 被执行程序所需的命令行参数,含程序名。以空指针( NULL )结束.
#include < unistd.h >int main(){ execl( "/bin/ls","ls","-al","/etc/passwd",(char *) 0);}
exec 函数族- execlp :
函数:int execlp ( const char * path ,const char * arg1 , ...)参数:
path:被执行程序名,可以不含完整路径,将会从 path 环境变量中查找该程序 .
arg1 - argn : 被执行程序所需的命令行参数,含程序名。以空指针( NULL )结束.
exec 函数族- execv:
函数:int execv ( const char * path , char * argv[ ] )参数:
path:被执行程序名,需包含完整路径 .
argv[ ] :被执行程序所需的命令行参数数组 .
exec 函数族- system:
函数:int system ( const char * string ) #include < stdlib.h >功能:
调用 fork 产生子进程,由子进程来调用 /bin/sh -c string 来执行 参数 string 所代表的命令 .
eg:system ( "ls -al /etc/passwd" );
进程等待 wait:
函数:pid_t wait ( int * status ) #include < sys/wait.h >
功能: 阻塞该进程,直到其 某个 子进程 退出 .
如果是子进程先运行,完成打印就睡眠,然后开始父进程,调用wait后,等待子进程的退出,10秒后,子进程退出,父进程打印.
如果是父进程先运行,调用wait后,等待子进程的退出,开始子进程,子进程完成打印就睡眠,10秒后,子进程退出,父进程打印.
- Linux 进程控制--- 编程 --- getpid --- fork --- exec --- system --- wait
- linux进程控制函数--fork,exec,exit,wait,sleep
- linux进程控制(fork,getpid,lockf)
- Linux进程控制编程之fork、wait
- 进程控制 [fork() exec() wait() waitpid()]
- 进程控制 [fork() exec() wait() waitpid()]
- 进程控制 [fork() exec() wait() waitpid()]
- 进程控制 [fork() exec() wait() waitpid()]
- LINUX进程控制(system(),fork(),exec())
- linux学习---进程控制(fork,vfork,popen,exec,system)
- 进程控制:system, exec* and fork
- 进程控制------基础、fork、exec、system
- 进程 fork exec,wait/waitpid
- Linux下C进程管理(fork,wait,exec)
- Linux下C进程管理(fork,wait,exec)
- Linux学习之进程fork()、exec、exit()/_exit()、wait()/waitpid
- Linux下进程相关:fork(),wait(),exec()
- (三)Linux进程、fork、wait、exec函数
- Psexec原理
- 第一章 Web MVC简介 —— 跟开涛学SpringMVC
- Git系列之二 --- git-dir & work-tree
- 不刷新实现图片上传功能
- 【技术类】你正确删除镶嵌数据集了吗
- Linux 进程控制--- 编程 --- getpid --- fork --- exec --- system --- wait
- flex 事件机制详解
- 用来解决 ViewFlipper 在其他控件上不能滑动的问题
- 深入理解string
- (转)Google Android 用户分析SDK
- MD5加密算法
- layoutinflate应用
- ping源代码完全解析
- 程序员不得不珍藏的那些励志片段