1、進程查看命令ps
(1)ps -aux偏向於進程佔有各種資源(CPU、內存)
(2)ps -ajx偏向於顯示進程各種有關的ID號(父進程的ID ppid,進程組ID pgid,進程會話ID SID)
2、守護進程
(1)deamon,表示守護進程,簡稱d(進程後面帶d的基本都是守護進程)
(2)長期運行(從開機到關機)
(3)與控制檯脫離(普通進程和控制檯綁定,控制檯關閉,進程結束)
(4)服務器,服務器的程序一般是守護進程
3、常見的守護進程
(1)syslogd系統日誌守護進程
(2)cron實現操作系統時間管理
4、編寫一個簡單的守護進程(creat_deamon()函數)
(1)子進程等待父進程退出
(2)子進程使用setsid創建新的會話器,脫離控制檯
(3)調用chdir將當前工作目錄設置爲根目錄“\”
(4)umask設置爲0以取消任何文件權限屏蔽
(5)關閉所有文件描述符
(6)將0、1、2定位到/dev/null
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void creat_daemon(void)
{
int i = 0;
pid_t pid = -1;
pid = fork();
if(pid == -1)
{
printf("fork error\n");
}
else if(pid > 0)//父進程直接退出
{
exit(1);
}
//子進程運行下面的代碼
setsid();//子進程創建新的會話期
chdir("/");//將當前工作路經設置爲/
umask(0);//取消任何文件的權限屏蔽(把權限調到最大)
//關閉所有文件描述符
//獲取當前系統中允許打開的最大文件描述符數目
for(i=0;i<sysconf(_SC_ARG_MAX);i++)
{
close(i);
}
open("/dev/null",O_RDWR);
open("/dev/null",O_RDWR);
open("/dev/null",O_RDWR);
}
int main(int argc,char*argv[])
{
creat_daemon();
while(1)
{
printf("I am running\n");
sleep(1);
}
return 0;
}