FreeBSD内核读书笔记-4.7-1
2009-05-13 05:11:38来源:未知 阅读 ()
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文件介绍人
- NetBSD笔记 2009-05-13
- portupgrade笔记 2009-05-13
- Linux学习笔记 2009-05-13
- FreeBSD7 Apache2.2 PHP5 PostgreSQL8.3 Ports安装笔记 2009-05-13
- Maildrop安装调试笔记 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash