僵尸进程:
#include
#include
#include
#include
int main(int argc, char const *argv[])
{
#if 1
pid_t iPid = fork();
if(iPid < 0)
{
perror("fork");
return -1;
}
else if(iPid > 0)// parent
{
printf("My child is %d.\n", iPid);
sleep(300);
}
else// child
{
printf("I'm child : %d.\n", getpid());
exit(EXIT_SUCCESS);
}
#endif
return 0;
}
孤儿进程:
#include
#include
#include
#include
int main(int argc, char const *argv[])
{
#if 1
pid_t iPid = fork();
if(iPid < 0)
{
perror("fork");
return -1;
}
else if(iPid > 0)// parent
{
printf("My child is %d.\n", iPid);
exit(EXIT_SUCCESS);
}
else// child
{
while(1)
{
printf("I'm running.\n");
sleep(1);
}
}
#endif
return 0;
}
守护进程(幽灵进程):
#include
#include
#include
int main(int argc, char const *argv[])
{
// 1. orphan
if(0 == fork())
{
// 2. pid_t setsid(void);
setsid();
// 3. int chdir(const char *path);
chdir("/");
// 4. umask(0);
umask(0);
// 5. close
for(int i = 0; i < getdtablesize(); i++)
{
close(i);
}
while(1)
{
// function
NULL;
}
}
return 0;
}