1.中断时钟
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
void *callback(void *arg)
{
char *flag = (char *)arg;
time_t tim = time(NULL);
while('q' != *flag)
{
system("clear");
time(&tim);
struct tm *now = localtime(&tim);
printf("时间:%02d:%02d:%02d\n" \
,now->tm_hour \
,now->tm_min \
,now->tm_sec);
sleep(1);
}
}
int main(int argc,const char *argv[])
{
char flag = ' ';
pthread_t tid;
if(0 != pthread_create(&tid,NULL,callback,&flag))
{
perror("pthread");
return -1;
}
while('q' != getchar());
return 0;
}
2.僵尸进程
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
int main(int argc,const char *argv[])
{
pid_t pid = fork();
if(0 > pid)
{
perror("fork");
return -1;
}
else if(0 == pid)
{
printf("子进程结束\n");
}
else
{
while(1)
{
printf("主进程运行中\n");
sleep(1);
}
printf("主进程结束\n");
}
return 0;
}
3.孤儿进程
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
int main(int argc,const char *argv[])
{
pid_t pid = fork();
if(0 > pid)
{
perror("fork");
return -1;
}
else if(0 == pid)
{
while(1)
{
printf("子进程结束\n");
}
}
else
{
printf("主进程结束\n");
}
return 0;
}
3.守卫进程
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc,const char *argv[])
{
pid_t pid = fork();
if(0 > pid)
{
perror("fork");
return -1;
}
else if(0 == pid)
{
setsid();
chdir("/");
umask(0);
for(int i = 0;i < 1024;i++)
{
close(i);
}
while(1)
{
printf("--------\n");
}
}
else
{
printf("子进程pid = %d\n",pid);
printf("主进程结束\n");
}
return 0;
}