이것을 입력하면 ps -ef
여러 가지 특수 커널 스레드 프로세스가 표시됩니다.
나는 커널 스레드에는 관심이 없습니다. 사용자 프로세스/스레드에만 관심이 있습니다.
커널 스레드를 숨기는 방법이 있습니까?
답변1
ps
출력은 여러 가지 방법으로 필터링될 수 있습니다. 프로세스를 보려면 사용자/UID별로 필터링할 수 있습니다. 아래의 관련 매뉴얼 페이지 -
U userlist Select by effective user ID (EUID) or name.
This selects the processes whose effective user name or ID is in userlist. The effective user ID describes the user
whose file access permissions are used by the process (see geteuid(2)). Identical to -u and --user.
-U userlist Select by real user ID (RUID) or name.
It selects the processes whose real user name or ID is in the userlist list. The real user ID identifies the user
who created the process, see getuid(2).
-u userlist Select by effective user ID (EUID) or name.
This selects the processes whose effective user name or ID is in userlist. The effective user ID describes the user
whose file access permissions are used by the process (see geteuid(2)). Identical to U and --user.
커널 스레드와 사용자 스레드를 식별하는 것은 커널 버전에 따라 달라질 수 있습니다. 내 Ubuntu 시스템(3.5.0-30-generic)에서는 kthreadd(pid =2)의 하위 항목을 제외하여 커널 스레드를 제외할 수 있습니다. kthreadd의 pid는 2.6 커널에서 다를 수 있습니다. 그러나 관련 pid를 사용할 수 있습니다. 예를 들어, ppid =2 없이 모든 프로세스 목록을 얻으려면 다음을 수행합니다(-o에 지정된 옵션은 매뉴얼 페이지를 확인하십시오).
ps -o pid,ppid,comm,flags,%cpu,sz,%mem --ppid 2 -N
grep이나 awk를 사용하여 필터링할 수도 있습니다. ps를 사용하지 않고 커널 스레드를 식별하는 또 다른 방법은 /proc//maps 또는 /proc/cmdline이 비어 있는지 확인하는 것입니다. 둘 다 커널 스레드에 대해 비어 있습니다. 이 작업을 수행하려면 루트 권한이 필요합니다.
답변2
awk
pid 2가 모든 커널 스레드의 상위라는 사실을 사용하여 출력을 필터링합니다.
ps -fHuroot | awk '$3!=2'
이렇게 하면 세 번째 필드(PPID)가 아닌 행만 인쇄됩니다 2
.