作业控制与守护进程

进程组,作业,会话

1进程组

每个进程除了有一个进程ID之外,还属于一个进程组.进程组是一个或者多个进程的集合.
通常他们与同一作业相关联,可以接受来自同一终端的各种信号.每个进程组有一个唯一的进程组ID,每个进程组都可以有一个组长进程.标识为:其进程组ID等于其进程ID

组长可以创建一个进程组,创建其中的进程,然后终止.只要组内有进程,则该进程就存在,与组长存亡无关

2作业

Shell分前后台控制的不是进程而是作业(Job)或者进程组(Process Group).一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成.shell可以运行一个前台作业和任意多个后台作业,这称为作业控制

作业与进程组的区别:如果作业中的某个进程创建了子进程,那么子进程不属于作业.而作业运行结束,shell就将自己提到前台,如果原先的前台进程还存在(子进程),他就自动变为后台进程组

3会话

会话是一个或者多个进程组的集合

一个会话可以有一个控制终端.也即是登录到其上的终端设备.

建立与控制终端连接的会话称为控制进程

一个会话应该包括一个控制进程(会话首进程),一个前台进程组和任意后台进程组

内核可以发送响应的信号给前台进程组中的所有进程

终端

unix系统中,用户通过终端登录到系统后得到一个shell进程.这个终端成为shell的控制终端,控制终端是保存在pcb中的信息,而fork会复制pcb信息,所以由当前shell启动的其他进程的控制终端也是这个终端

每个进程都可以通过访问/dev/tty访问他的控制终端.
ttyname函数可以由文件描述符查处对应的文件名

#include#includeint main(int argc, char const *argv[])
{
    printf("fd: %d ->%s\n",0, ttyname(0));
    printf("fd: %d ->%s\n",1, ttyname(1));
    printf("fd: %d ->%s\n",2, ttyname(2));
    return 0;
}

不同的终端运行结果

终端登录过程

可以通过Ctrl+Alt+F1~F6切换字符终端,相当于6个虚拟终端设备.对应/dev/tty1-6

tty0表示当前虚拟终端.

系统对终端输入的处理流程一般为

用户输入字符通过内核系统->终端设备驱动(字符解释)-->输出到终端
对于Ctrl+c等字符,不会被用户程序read到,而是被线路规程截获,解释为SIGINT信号给前台进程.

终端登录过程:

1.系统启动,init进程根据配置文件/etc/inittab确定需要打开哪些终端.
2.getty根据命令行参数打开终端设备作为他的控制终端,定位0,1,2描述符到终端.等待用户输入账户.
用户输入帐号后,getty任务完成,再执行login程序
execle("/bin/login","login", "-p",username,NULL,envp);
3login程序提示用户输入密码,如果不正确,login终止,init重新fork/exec一个getty进程.如果争取,login程序设置环境变量,设置当前工作目录为该进程的主目录,然后执行shell:
execl("/bin/bash","-bash",NULL);

getty--exec--login--bash,同一个进程执行,终端没有变.

作业控制

1.sessiion(会话)与进程组

启动一个终端也就是启动一个会话,一个会话中可以包含多个作业,每个作业对应一个初始进程组,如果进程组自己内部产生子进程,那么该进程非属于进程组,但不属于作业

作业控制(SID)

注:截图中,我们关注PID进程id,PPID父进程id,PGID进程组id,SID会话(session leader)id
可以看到,所有进程的sid都是4414,等于第一个bash的id,这就是他们的会话id,
作业id等于组idPGID

lang@liang:~$ ps -o pid,ppid,pgid,session,tpgid,comm,wchan

PID  PPID  PGID  SESS TPGID COMMAND        WCHAN

4414  3980  4414  4414  4629 bash            wait

4460  4414  4460  4414  4629 bash            wait

4550  4460  4550  4414  4629 bash            wait

4560  4550  4560  4414  4629 bash            wait

4629  4560  4629  4414  4629 ps              -

可以看到,TPGID为4629,也就是ps命令作为topgid(前台进程)其他进程切换至后台等待

jobs命令查看当前执行作业
bg将前台作业移动到后台
fg将后台作业移动到前台

lang@liang:~/linux$ jobs

[2]+  运行中              sleep 299 &

lang@liang:~/linux$ sleep 100 &

[3] 4673

lang@liang:~/linux$ jobs

[2]-  运行中              sleep 299 &

[3]+  运行中              sleep 100 &

lang@liang:~/linux$ fg 3

sleep 100

^C

lang@liang:~/linux$ jobs

[2]+  运行中              sleep 299 &

守护进程

守护进程也叫精灵进程daemon.是运行在后台的一种特殊进程.
独立于控制终端
周期性执行任务或者等待事件发生.
不能直接和用户交互,系统服务进程不受洪湖登录注销影响,他们一直在运行,叫做守护进程

守护进程采用d结尾名字,表示daemon

创建守护进程最关键一步setsid,创建会话,成为会话首进程.

成功返回时:
1.创建一个新的session,当前进程成为session leader,当前进程id就是session的 id
2.创建一个新的进程组,当前进程成为进程组leader,....
3如果当前进程原本有一个控制终端,则失去这个终端, 成为一个没有控制终端的进程.失去(原本的终端仍然打开,仍然可以读写,但只是一个普通的打开文件而已.)

创建守护进程

1.调用umask将文件模式创建屏蔽字设置为0
2.调用fork,父进程退出(让shell以为程序结束,shell作为前台进程;;保证子进程是一个进程组的组长)
3.调用setsid创建一个新会话.(导致,1新会话首进程,2称为进程组长,3调用进程没有控制终端(再次fork保证daemon之后不会打开tty设备))
4.将当前工作目录更改为跟目录
5.关闭不需要的文件描述符
6忽略SIGCHLD信号

或者调用unix标准函数
daemon(0,0);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容