fork:
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <signal.h>
int main(void )
{
int fd;
pid_t pid;
signal(SIGCHLD, SIG_IGN);
printf("befor fork pid:%d \n", getpid());
int num = 10; //思考打印
fd = open("11.txt", O_WRONLY);
if (fd == -1)
{
return 0;
}
pid = fork();
if (pid == -1)
{
printf("pid < 0 err.\n");
return -1;
}
if (pid > 0)
{
printf("parent: pid:%d \n", getpid());
write(fd, "parent", 6);
close(fd);
//sleep(1);
}
else if (pid == 0)
{
printf("child: %d, parent: %d \n", getpid(), getppid());
write(fd, "child", 5);
close(fd);
//sleep(100);
}
printf("fork after....\n");
return 0;
}
vfork:
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <signal.h>
int main01(void )
{
pid_t pid;
int ret = 0;
printf("befor fork pid:%d \n", getpid());
int abc = 10;
pid = vfork(); //errno
if (pid == -1)
{
//printf("pid < 0 err.\n");
perror("tile");
return -1;
}
if (pid > 0)
{
printf("parent: pid:%d \n", getpid());
}
else if (pid == 0)
{
printf("child: %d, parent: %d \n", getpid(), getppid());
//printf("abc:%d\n", abc);
ret = execve("./hello", NULL, NULL);
if (ret == -1)
{
perror("execve:");
}
printf("execve 测试有没有执行\n");
exit(0);
}
printf("fork after....\n");
return 0;
}
int main(void )
{
pid_t pid;
int ret = 0;
printf("befor fork pid:%d \n", getpid());
int abc = 10;
pid = vfork(); //errno
if (pid == -1)
{
//printf("pid < 0 err.\n");
perror("tile");
return -1;
}
if (pid > 0)
{
printf("parent: pid:%d \n", getpid());
}
else if (pid == 0)
{
printf("child: %d, parent: %d \n", getpid(), getppid());
//printf("abc:%d\n", abc);
char *const argv[] = {"ls", "-l", NULL};
ret = execve("/bin/ls", argv, NULL);
if (ret == -1)
{
perror("execve:");
}
printf("execve 测试有没有执行\n");
exit(0);
}
//printf("fork after....\n");
return 0;
}
创建进程的两种方式
最新推荐文章于 2024-03-19 22:58:36 发布