Linux Kernel Development——列出系统中所有的进程

简介:

1. 在内核模块中列出所有的进程:

从init_task开始遍历内核链表,输出所有进程

复制代码
#include <linux/module.h>
#include <linux/list.h>
#include <linux/init.h>
#include <linux/sched.h>

MODULE_LICENSE("Dual BSD/GPL");

static int test_init(void)
{
        struct task_struct *task, *p;
        struct list_head *pos;
        int count=0;

        printk(KERN_ALERT "test module init\n");

        task=&init_task;
        list_for_each(pos, &task->tasks)
        {
                p=list_entry(pos, struct task_struct, tasks);
                count++;
                printk(KERN_ALERT "%s[%d]\n", p->comm, p->pid);
        }
        printk(KERN_ALERT "Total %d tasks\n", count);

        return 0;
}

static void test_exit(void)
{
        printk(KERN_ALERT "test module exit!\n");
}

module_init(test_init);
module_exit(test_exit);
复制代码

Makefile

复制代码
ifneq ($(KERNELRELEASE),)
        obj-m := test.o
else
        KDIR := /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules
endif
复制代码

2. 使用Systemtap输出所有进程:

复制代码
//process_list.stp

%{  
#include <linux/list.h>
#include <linux/sched.h>
%}

function process_list ()
%{  
    struct task_struct *p;
    struct list_head *_p,*_n;

    for_each_process(p){
        _stp_printf("%-15s (%-5d)\n",p->comm,p->pid);
    }
%}

probe begin
{   
    process_list();
    exit()
}
复制代码

运行方法

复制代码
# stap -g process_list.stp 
init            (1    )
kthreadd        (2    )
migration/0     (3    )
ksoftirqd/0     (4    )
migration/0     (5    )
watchdog/0      (6    )
migration/1     (7    )
migration/1     (8    )
ksoftirqd/1     (9    )
watchdog/1      (10   )
events/0        (11   )
events/1        (12   )
cpuset          (13   )
khelper         (14   )
netns           (15   )
....
复制代码

3. 使用Systemtap打印进程uts命名空间信息

复制代码
 //namespace_uts.stp
 %{
     #include<linux/list.h>

     #include<linux/sched.h>

     #include <linux/nsproxy.h>

     #include<linux/utsname.h>
 %}

function process_list ()
 %{
    struct task_struct *p;
    struct list_head *_p,*_n;
    struct uts_namespace *uts;
    struct new_utsname *utsname;

    for_each_process(p){
        uts=p->nsproxy->uts_ns;
        utsname=&(uts->name);
        _stp_printf("%-15s(%-5d) %-24s %-16s\n", p->comm,p->pid,utsname->release, utsname->sysname);
     }
 %}

probe begin
 {
    process_list();
    exit()
 }
复制代码
复制代码
# stap -g namespace_uts.stp 
init           (1    ) 2.6.32-220.el6.x86_64    Linux           
kthreadd       (2    ) 2.6.32-220.el6.x86_64    Linux           
migration/0    (3    ) 2.6.32-220.el6.x86_64    Linux           
ksoftirqd/0    (4    ) 2.6.32-220.el6.x86_64    Linux           
migration/0    (5    ) 2.6.32-220.el6.x86_64    Linux           
watchdog/0     (6    ) 2.6.32-220.el6.x86_64    Linux           
migration/1    (7    ) 2.6.32-220.el6.x86_64    Linux           
migration/1    (8    ) 2.6.32-220.el6.x86_64    Linux 
....
复制代码


本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2013/03/04/2943517.html,如需转载请自行联系原作者

相关文章
|
3月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
304 3
Linux系统禁用swap
|
3月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
483 3
|
4月前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
4月前
|
存储 Ubuntu Linux
「正点原子Linux连载」第二章Ubuntu系统入门
在图2.8.2.4中,我们使用命令umount卸载了U盘,卸载以后当我们再去访问文件夹/mnt/tmp的时候发现里面没有任何文件了,说明我们卸载成功了。
|
2月前
|
监控 关系型数据库 MySQL
在CentOS系统中,如何统计哪个进程打开了文件描述符?
利用上述方法,你可以有效地监控和统计CentOS系统中的进程打开的文件描述符数量,以帮助排查错误或优化系统配置。通过组合使用各种工具和命令,可以获得对系统状态和行为的深入了解,进而做出相应的调整和
163 5
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
422 0
Linux系统初始化脚本
|
4月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
297 18
|
3月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
348 1
|
3月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1066 1
|
4月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
1665 10