1.孤儿进程。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
pid_t pid=fork();
if (pid>0)
{
}
else if (pid==0)
{
while(1)
{
printf("hello world\n");
sleep(1);
}
}
else if (pid<0)
{
perror("fork");
return -1;
}
return 0; //关闭用killall -9 a.out
}
2.僵尸进程
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
pid_t pid=fork();
if (pid==0)
{
}
else if (pid>0)
{
while(1)
{
sleep(1);
printf("hello world\n");
}
}
else if (pid<0)
{
perror("fork");
return -1;
}
return 0;
}
3.守护进程
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
int main(int argc, const char *argv[])
{
pid_t pid=fork();
if (pid<0)
{
perror("fork");
return -1;
}
else if(pid>0)
{
}
else if (pid==0)
{
setsid();
chdir("/");
umask(0);
for (int i=0; i<1024; i++)
{
close(i);
}
while(1) puts("1");sleep(1);
}
return 0;
}
4.1.修改标准lO时候写的时钟代码,要求输入'q后,能够退出该程序。
#include <stdio.h>
#include <time.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#include <pthread.h>
void* call_back(void *p)
{
time_t time_cur;
while(1)
{
time_cur =time(NULL);
if (time_cur==-1)
{
perror("time");
return NULL;
}
struct tm*c_t;
c_t=localtime(&time_cur);
printf("%d-%02d-%02d %02d-%02d-%02d\r",c_t->tm_year+1900,
c_t->tm_mon+1,c_t->tm_mday
,c_t->tm_hour,c_t->tm_min,c_t->tm_sec);
fflush(stdout);
sleep(1);
}
}
int main(int argc, const char *argv[])
{
pthread_t num;
int pth=pthread_create(&num,NULL,call_back,NULL);
if (pth!=0)
{
perror("pthread_create");
return -1;
}
char a;
while(1)
{
scanf("%c",&a);
if (a=='q')
{
break;
}
}
return 0;
}