前面有篇
文章写的是添加一个系统调用,当时忘记写调用的实例了,这里先补充一下,写一个简单的调用实例:
#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;
}
|
是的,就是这么简单,只是在使用中注意一下就行了,其他的地方和前面说的就没什么区别。恩。就是这些了
阅读(1841) | 评论(0) | 转发(0) |