#include <time.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include <mysql/mysql.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <signal.h>
#include <sys/resource.h>
int main()
{
int a;
scanf("%d",&a);
if(a==0){
if(fork() == 0){
setsid();
while(1){}
}
else{
while(1){}
}
}
else{
if(fork() == 0){
while(1){}
}
else{
while(1){}
}
}
}
在tty2启动程序,第一次输入1,在tty3,用命令ps -a可以发现有两个进程,一个是子进程,另外一个是父进程,两个进程属于同一个session ,即bash,这两个进程属于processes associated with a terminal。
然后在杀掉两个进程,再一次启动程序,这次输入0,在tty3查看进程,发现只有一个进程,因为子进程属于另外一个session,属于processes not associated with a terminal,
ps -a可以查看processes associated with a terminal,因此平常我们在bash中启动的小程序基本上用ps -a都可以看得到,而系统服务程序一般都有自己的session,不和rerminal关联,因此我们用ps -a看不到系统服务程序。