linux下多进程 (fork)
这里只是简单实用fork, 大家想了解具体 欢迎到我的gitee
给个star
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main() {
int pid;
printf("before fork()...");
fflush(stdout);
if((pid = fork()) < 0) { // fork对输出缓冲区进行复制
perror("fork");
}
if(pid == 0) {
printf("In Child\n");
} else {
sleep(1);
printf("In father\n");
}
printf("END FORK!\n");
return 0;
}
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main() {
int pid, x = 0;
for(int i = 1; i <= 3; i++) {
if((pid = fork()) < 0) {
perror("fork()");
continue;
}
if(pid == 0) {
x = i;
}
}
printf("I/m %dth child.\n", x);
sleep(60);
// printf("father%d\n", x);
return 0;
}
exec
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<sys/wait.h>
int main(int argc, char **argv) {
pid_t pid;
char filename[512] = {0};
char o_name[512] = {0};
char f_type[256] = {0};
char cmd[512] = {0};
if(argc < 2) {
fprintf(stderr, "Usage: %s filename arg...\n", argv[0]);
return 1;
}
strcpy(filename, argv[1]);
//a.c b.cpp
char *sub;
sub = strrchr(filename, '.');
strncpy(o_name, filename, sub - filename);
strcpy(f_type, sub);
if(!strcmp(f_type, ".c")) {
strcpy(cmd, "gcc");
} else if(!strcmp(f_type, ".cpp")) {
strcpy(cmd, "g++");
} else {
fprintf(stderr, "Not support File Type\n");
return 2;
}
if((pid = fork()) < 0) {
perror("fork");
return 3;
}
if(pid == 0) {
execlp("vim", "vim", filename, NULL);
}
wait(NULL);
if((pid = fork()) < 0) {
perror("fork");
return 3;
}
if(pid == 0) {
execlp(cmd, cmd, filename, "-o", o_name, NULL);
}
int status; //子进程状态
wait(&status);
if(status == 0) {
printf("OK\n");
char name[25] = "./";
strcat(name, o_name);
execlp(name,name,NULL, NULL);
}
return 0;
}