저는 모듈 프로그래밍에 익숙하며 시스템 프로세스를 검색하고 소비하는 CPU 양을 표시하기 위해 시스템 호출을해야합니다.프로세스 목록을 얻으려면 시스템 호출을하십시오.
어떻게 전화를 걸 수 있습니까?
저는 모듈 프로그래밍에 익숙하며 시스템 프로세스를 검색하고 소비하는 CPU 양을 표시하기 위해 시스템 호출을해야합니다.프로세스 목록을 얻으려면 시스템 호출을하십시오.
어떻게 전화를 걸 수 있습니까?
왜 에을 구현 하시겠습니까? 기존 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);
정보를 수집해야합니다. 그러나, 당신이 정말로 무엇을하고 있는지를 알지 못한다면 거기에서 아무 것도 바꾸지 마십시오.
당신은 이것을 사용하는 방법과 그것이 어떻게 작동하는지에 대한 설명을 할 수 있습니까? –
글쎄, 시작 작업을해야합니다. 그것은 종종 "현재"에 의해 행해지는데, 그것은 현재 마르코입니다. 이를 통해 현재 실행중인 작업을 가져올 수 있습니다. 그것은 과제와 함께 돌아올 것입니다. 그런 다음 이제 iterating을 시작할 수 있습니다. – Wandy
열기 및 읽기라는 syscalls가 있습니다. 모든 프로세스의 정보는 모두 /proc/{pid}
디렉토리에 보관됩니다. 해당 파일을 읽어 프로세스 정보를 수집 할 수 있습니다.
여기에 더 자세히 설명되어 있습니다. http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html
'top' 명령을 언급하고 있습니까? – alfasin
출력은 맨 위 명령과 비슷하지만 그렇게하는 시스템 호출을 구현해야합니다. – douglasd3