FreeBSD内核读书笔记-4.7-1

2009-05-13 05:11:38来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

【The Design and Implementation of the FreeBSD Operating System】4.7

4.7 Signals 笔记1

【A signal is posted to a single process with the psignal() routine or to a group of processes with the gsignal() routine. The gsignal() routine invokes psignal() for each process in the specified process group. 】


---------------------------------------------------------------------FreeBSD6.1
1449 /*
1450  * Send a signal to a process group.
1451  */
1452 void
1453 gsignal(pgid, sig)
1454     int pgid, sig;
1455 {
1456     struct pgrp *pgrp;
1457
1458     if (pgid != 0) {
1459         sx_slock(&proctree_lock);
1460         pgrp = pgfind(pgid);
1461         sx_sunlock(&proctree_lock);
1462         if (pgrp != NULL) {
1423             pgsignal(pgrp, sig, 0);
1464             PGRP_UNLOCK(pgrp);
1465         }
1466     }
1467 }
1468
1469 /*
1470  * Send a signal to a process group. If checktty is 1,
1471  * limit to members which have a controlling terminal.
1472  */
1473 void
1474 pgsignal(pgrp, sig, checkctty)
1475     struct pgrp *pgrp;
1476     int sig, checkctty;
1477 {
1478     register struct proc *p;
1479
1480     if (pgrp) {
1481         PGRP_LOCK_ASSERT(pgrp, MA_OWNED);
1482         LIST_FOREACH(p, &pgrp->pg_members, p_pglist) {
1483             PROC_LOCK(p);
1484             if (checkctty == 0 || p->p_flag & P_CONTROLT)
1485                 psignal(p, sig);
1486             PROC_UNLOCK(p);
1487         }
1488     }
1489 }
---------------------------------------------------/usr/src/sys/kern/kern_sig.c



进程组的hash链表pgrphashtbl[]是由/sys/kern/kern_proc.c文件中定义的struct sx类型变量proctree_lock进行保护的,这是一个Shared/Exclusive类型的锁。如果需要对被保护对象执行读操作,则只需获得共享锁,且多个线程可同时请求对同一个对象的共享锁。如果需要对被保护对象执行写操作,则需要获得互斥锁。对于同一个对象,只能有一个线程持有其互斥锁。在gsignal()函数中,由于只是读取进程组hash链表中的内容,因此只需在读取前后获取和释放共享锁即可(1459、1461行)。

1460行根据进程组ID从进程组hash链表中找到进程组的指针,传给pgsignal()函数。pgsignal()函数遍历该进程组链表,对于链表上的每一个进程都调用psignal()函数发送相应信号。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:etc文件介绍人

下一篇:BSD发布: TrueBSD 0.1