Linux进程(创建进程、等待进程结束、退出进程)
1.创建进程
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
fork()函数用来创建一个进程,创建成功返回0,失败返回-1。
实例
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
pid_t pid;
pid=fork();
if(-1==pid)
{
printf("Error to create new process!\n");
return -1;
}
else if(pid==0)
{
printf("Child process!\n");
}
else
{
printf("Parent process! Child process ID:%d",pid);
}
return 0;
}
2.等待进程结束
#include <sys/types.h>
#include <sys/wait.h>
pid_t waitpid(pid_t pid,int *status,int options);
waitpid()返回值:
①<-1:等待所有其进程组表示等于pid绝对值的子进程;
②-1:等待任何子进程;
③0:等待任何其组标识等于调用进程组标识的进程;
④>0:等待其进程标识等于pid的进程。
status表示子进程的返回状态,option默认为0或者设置其他选项,这里不做解释。
实例
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
pid_t pid,pid_wait;
int status;
pid=fork();
if(-1==pid)
{
printf("Error to create new process!\n");
return 0;
}
else if(pid==0)
{
printf("Chile process!\n");
}
else
{
printf("Parent process!Child process ID:%d\n",pid);
pid_wait=waitpid(pid,&status,0);
printf("Child process %d returned!\n",pid_wait);
}
return 0;
}
3.退出进程
#include <stdlib.h>
int atexit(void (*function)(void));
int on_exit(void (*function)(int,void*),void *arg);
void exit(int status);
#include <unistd.h>
void _exit(int status);
exit()是退出当前进程,释放进程占用资源;_exit()也是退出当前进程,不释放进程占用资源。
atexit()和on_exit()是程序退出时调用用户代码。
实例
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void bye()
{
printf("That was all,forks\n");
}
void bye1()
{
printf("This is the first fork\n");
}
int main()
{
int i;
i=atexit(bye);
if(i!=0)
{
fprintf(stderr,"cannot set exit function bye()!\n");
return EXIT_FAILURE;
}
i=atexit(bye1);
if(i!=0)
{
fprintf(stderr,"cannot set exit function bye1()!\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
bye1()会被先执行,bye()后执行。
不积跬步无以至千里。