Linux系统编程2:进程的创建、结束、停止
1.进程操作接口
获取PID
进程标识pid:进程身份证号
- 示例
#include <stdio.h>
#include <unistd.h>
int main(){
printf("PID:%dPPID:%d\n",getpid(),getppid());
}
如何查看进程的PID和PPID?
ps -o pid,ppid,cmd,s
2.如何创建进程
2.1 分叉函数pid_t fork()
-
返回值
-
特点
- 调用一次,返回两次
- 相同但是独立的地址空间
- 并发执行
- 共享文件
-
示例
调用一次,返回两次
#include <stdio.h>
#include <unistd.h>
int main(){
printf("PID:%d,PPID:%d\n",getpid(),getppid());
pid_t pid = fork();
fork();
if(pid == 0){
// child
printf("this is child\n");
printf("res:%d,PID:%d,PPID:%d\n",pid,getpid(),getppid());
}else{
printf("this is father\n");
printf("res:%d,PID:%d,PPID:%d\n",pid,getpid(),getppid());
}
for(;;);
}
相同但是独立的地址空间&并发执行
#include <stdio.h>
#include <unistd.h>
int i = 100;
int main(){
int j=100;
pid_t pid = fork();
if(pid == 0){
// child
int k;
for(k=0;k<10000;k++)
printf("this is childi%d\t j%d\n",++i,++j);
}else{
int k;
for(k=0;k<10000;k++)
printf("this is fatheri%d\t j%d\n",--i,--j);
}
}
共享文件
#include <stdio.h>
#include <unistd.h>
int i = 100;
int main(){
int j=100;
FILE* fd = fopen("./test","w+");
pid_t pid = fork();
if(pid == 0)