linux实现系统调用打印进程信息
2015-12-25 21:32
591 查看
在linux中,通过系统调用实现打印出当前进程PID,运行状态等信息,以及父进程的简单信息。若对系统调用过程不了解,可以查看我的博客http://blog.csdn.net/smilematch/article/details/50299275。
在linux中,进程信息存在task_struct结构体中,若对此不了解,可以参考我的博客http://blog.csdn.net/smilematch/article/details/50384709
或者http://www.2cto.com/os/201201/116810.html了解详细信息。
首先,需要创建内核调用文件sys_myprocess.c:
编写测试程序test_myprocess.c:
ok,编译执行得以下结果:
在linux中,进程信息存在task_struct结构体中,若对此不了解,可以参考我的博客http://blog.csdn.net/smilematch/article/details/50384709
或者http://www.2cto.com/os/201201/116810.html了解详细信息。
首先,需要创建内核调用文件sys_myprocess.c:
#include<linux/kernel.h> #include<linux/module.h> #include<linux/init.h> #include<linux/sched.h> struct task_struct *pcurrent; struct task_struct *task; asmlinkage int sys_myprocess(void) { pcurrent = get_current(); printk(KERN_INFO "Current :\n pid : %d\n",current->pid);/*当前进程PID*/ printk(KERN_INFO "Task state: %d\n",current->state);/*运行状态,-1为不可运行,0为可运行,>0为运行结束*/ printk(KERN_INFO "Task name: %s\n",current->comm);/*进程名*/ printk(KERN_INFO "Start time:%.24s %1d\n",(current->start_time).tv_sec,(current->start_time).tv_nsec);/*进程开始时间,timespec是纳米级时间,是一个结构体 其定义为:struct timespec {time_t tv_sec; long tv_nsec; };*/ int i=0; for(task=current->parent;task!=&init_task;task=task->parent) {/*输出父进程直到init*/ i=i+1; printk(KERN_INFO "%d parent pid:%d\n",i,task->pid); } printk(KERN_INFO "END By linfeng!\n"); return 1; }
编写测试程序test_myprocess.c:
#include<sys/syscall.h> #include<sys/types.h> #include<stdio.h> #define __NR_myprocess 300 int main(int argc,char *argv[]) { syscall(__NR_myprocess); return 0; }
ok,编译执行得以下结果:
相关文章推荐
- Linux socket 初步
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区