作业求助:添加系统调用
时间:2011-06-30
来源:互联网
我在上一门FreeBSD的课。这个作业要添加如下系统调用:
复制代码
该系统调用把signum指定的signal发送给uid拥有的所有进程,当前这个进程除外。老师说要先看kill(2)的实现,但是看不太懂啊。还有要求要做安全检查,比如priv_check(9). 请各位大牛指点一二。感觉无从下手。如果能给个例子最好。谢谢!
以下是kill(2)的实现:
复制代码
- 515 AUE_NULL STD { int uidkill(uid_t uid, int signum); }
以下是kill(2)的实现:
- 1687 kill(struct thread *td, struct kill_args *uap)
- 1688 {
- 1689 ksiginfo_t ksi;
- 1690 struct proc *p;
- 1691 int error;
- 1692
- 1693 AUDIT_ARG_SIGNUM(uap->signum);
- 1694 AUDIT_ARG_PID(uap->pid);
- 1695 if ((u_int)uap->signum > _SIG_MAXSIG)
- 1696 return (EINVAL);
- 1697
- 1698 ksiginfo_init(&ksi);
- 1699 ksi.ksi_signo = uap->signum;
- 1700 ksi.ksi_code = SI_USER;
- 1701 ksi.ksi_pid = td->td_proc->p_pid;
- 1702 ksi.ksi_uid = td->td_ucred->cr_ruid;
- 1703
- 1704 if (uap->pid > 0) {
- 1705 /* kill single process */
- 1706 if ((p = pfind(uap->pid)) == NULL) {
- 1707 if ((p = zpfind(uap->pid)) == NULL)
- 1708 return (ESRCH);
- 1709 }
- 1710 AUDIT_ARG_PROCESS(p);
- 1711 error = p_cansignal(td, p, uap->signum);
- 1712 if (error == 0 && uap->signum)
- 1713 pksignal(p, uap->signum, &ksi);
- 1714 PROC_UNLOCK(p);
- 1715 return (error);
- 1716 }
- 1717 switch (uap->pid) {
- 1718 case -1: /* broadcast signal */
- 1719 return (killpg1(td, uap->signum, 0, 1, &ksi));
- 1720 case 0: /* signal own process group */
- 1721 return (killpg1(td, uap->signum, 0, 0, &ksi));
- 1722 default: /* negative explicit process group */
- 1723 return (killpg1(td, uap->signum, -uap->pid, 0, &ksi));
- 1724 }
- 1725 /* NOTREACHED */
- 1726 }
作者: exorcistkiller 发布时间: 2011-06-30
哪个大学?
羡慕。。。

羡慕。。。
作者: hniu 发布时间: 2011-06-30
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28