Chinaunix首页 | 论坛 | 博客
  • 博客访问: 824506
  • 博文数量: 92
  • 博客积分: 1498
  • 博客等级: 上尉
  • 技术积分: 993
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-18 18:31
文章分类

全部博文(92)

文章存档

2013年(2)

2012年(3)

2011年(3)

2010年(61)

2009年(23)

分类: LINUX

2010-06-09 22:07:17

前面有篇文章写的是添加一个系统调用,当时忘记写调用的实例了,这里先补充一下,写一个简单的调用实例:

#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>
#define __NR_sayhello 338
int main()
{
        syscall(__NR_sayhello);
        return 0;
}

运行,执行以后,
zhou@zhou:~/kernel/test$ dmesg   
查看,就能看到在系统日志的最后打印了当前所有进程的pid和命令
好了,前面的就说到这,现在继续写一个带有参数的系统调用,关键是参数的传入,返回参数和一般的函
数差不多(个人理解,有待试验),参数的传入其实和普通的系统调用挺像的。

首先,在内核源码中写一个系统调用函数,我的是在/kernel/signal.c里面

/*
 * using this function you can kill a process by pid
 *
 * */

asmlinkage void sys_kill_by_pid(pid_t pid)
{

    struct siginfo info;
    
    info.si_signo = SIGABRT;
    info.si_errno = 0;
    info.si_code = SI_USER;
    info.si_pid = task_tgid_vnr(current);
    info.si_uid = current_uid();
    kill_something_info(SIGABRT, &info, pid);

}


功能就是只通过pid杀死一个正在运行的进程,其他的步骤和无参的类似,关键就是调用系统调用函数里面的使
用了。好了,中间的几个步骤就省略了。不清楚的可以看这里
然后就是在调用程序里面要注意的,

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <syscall.h>


//#define __NR_kill_by_pid 339  使用这个就使用下面的注释了的代码
#define kill_by_pid(pid) syscall(339,pid)

int main()
{        
        kill_by_pid(2729); //这里要杀死的进程的进程号为2729
        //syscall(__NR_kill_by_pid,2729);
        return 0;
}


是的,就是这么简单,只是在使用中注意一下就行了,其他的地方和前面说的就没什么区别。恩。就是这些了
阅读(1861) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~