进程创建
getpid函数需要包含的头文件,以及函数的定义:
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);//返回当前进程id
pid_t getppid(void);
fork函数需要包含的头文件,以及函数的定义:
#include <unistd.h>
pid_t fork(void);//在父进程返回进程号,在子进程中返回0,错误返回-1
例1
#include "stdio.h"
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid;
int data = 10;
while(1)
{
printf("please input a data\n");
scanf("%d",&data);
if(data==1)
{
pid =fork();
if(pid>0)//父
{
printf("this is father=%d\n",getpid());
}
else if(pid ==0)//子
{
printf("do net request,pid=%d\n",getpid());
}
}
else
{
printf("wait do nothing");
}
}
return 0;
}
vfork函数需要包含的头文件,以及函数的定义:
与fork区别:1、直接使用父进程存储空间,不拷贝。
2、子进程调用exit()退出后,父进程才执行。
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void);
进程退出
exit函数需要包含的头文件,以及函数的定义:
#include <stdlib.h>
void exit(int status);
status的值为0正常退出,其他值为在执行中发生错误。
wait函数包含的头文件,以及函数的定义:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
/* This is the glibc and POSIX interface; see
NOTES for information on the raw system call. */
status为空的时候表示不关心退出的状态。
waitpid的option可以选择WNOHANG不阻塞。
WUNTERACED:如果子进程暂停则立马返回,结束状态不予理会。
WEXITSTATUS(status)可以解析出退出的状态。
返回值:成功则返回子进程识别码,失败返回-1.
进程启动exec族
#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg, ...
/* (char *) NULL */);
int execlp(const char *file, const char *arg, ...
/* (char *) NULL */);
int execle(const char *path, const char *arg, ...
/*, (char *) NULL, char * const envp[] */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],
char *const envp[]);
execl:
path:文件路径。后面argv[0],argv[1],…最后一个必须为空指针。
返回值成功函数不返回,失败返回-1.失败原因在error中。
execlp:
file:PATH环境变量所指的目录查找符合的file文件名,其他同上。
system函数需要包含的头文件,以及函数的定义:
#include <stdlib.h>
int system(const char *command);
string:执行的命令。
返回值:调用失败时返回127,其他原因失败返回-1。
popen函数需要包含的头文件,以及函数的定义:
#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
command执行的命令。type:"r"则文件指针连接到command标准输出。“w”则文件指针连接到标准输入。
返回值:调用失败时返回127,其他原因失败返回-1。
例:
#include "stdlib.h"
#include "unistd.h"
int main()
{
char ret[1024]={0};
FILE *fp;
fp=popen("ps","r");
int nread=fread(ret,1,1024,fp);
printf("read ret %d byte,ret=%s\n",nread,ret);
return 0;
}