2013-08-23 2 views

답변

13

을 구현 하시겠습니까? 기존 Linux API에 syscall을 추가하고 싶지는 않습니다. 이것은 사용자 공간에 대한 주요 리눅스 인터페이스이며 누구도 자신이하는 일을 알고있는 최고의 커널 개발자를 제외하고는 syscall을 만납니다.

프로세스 및 매개 변수 및 실시간 상태 목록을 보려면 /proc을 사용하십시오. 거기에 정수가있는 모든 디렉토리는 기존 프로세스 ID이며 유용한 동적 파일을 포함하고 있습니다. ps, top 등이 출력을 인쇄하는 데 사용합니다.

커널 내부 (예 : 모듈 내)의 프로세스 목록을 얻으려면 프로세스가 내부적으로 init 프로세스 (커널의 심볼 init_task)로 시작하는 이중 연결 목록으로 유지된다는 사실을 알아야합니다. . 프로세스를 얻으려면 include/linux/sched.h에 정의 된 매크로를 사용해야합니다. 다음은 그 예입니다.

#include <linux/module.h> 
#include <linux/printk.h> 
#include <linux/sched.h> 

static int __init ex_init(void) 
{ 
    struct task_struct *task; 

    for_each_process(task) 
     pr_info("%s [%d]\n", task->comm, task->pid); 

    return 0; 
} 

static void __exit ex_fini(void) 
{ 
} 

module_init(ex_init); 
module_exit(ex_fini); 

정보를 수집해야합니다. 그러나, 당신이 정말로 무엇을하고 있는지를 알지 못한다면 거기에서 아무 것도 바꾸지 마십시오.

+0

당신은 이것을 사용하는 방법과 그것이 어떻게 작동하는지에 대한 설명을 할 수 있습니까? –

+0

글쎄, 시작 ​​작업을해야합니다. 그것은 종종 "현재"에 의해 행해지는데, 그것은 현재 마르코입니다. 이를 통해 현재 실행중인 작업을 가져올 수 있습니다. 그것은 과제와 함께 돌아올 것입니다. 그런 다음 이제 iterating을 시작할 수 있습니다. – Wandy

0

열기 및 읽기라는 syscalls가 있습니다. 모든 프로세스의 정보는 모두 /proc/{pid} 디렉토리에 보관됩니다. 해당 파일을 읽어 프로세스 정보를 수집 할 수 있습니다.

여기에 더 자세히 설명되어 있습니다. http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

관련 문제