![실행 중인 모든 데몬을 나열하는 방법은 무엇입니까?](https://linux55.com/image/35192/%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%20%EB%AA%A8%EB%93%A0%20%EB%8D%B0%EB%AA%AC%EC%9D%84%20%EB%82%98%EC%97%B4%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내 질문에서데몬의 프로세스 ID와 세션 ID가 다를 수 있나요?, 데몬이 무엇을 하는지 쉽게 결정할 수 없다는 것은 분명합니다. 나는 이 service --status-all
명령을 사용하여 내 시스템의 모든 데몬을 나열할 수 있다는 여러 기사와 여러 포럼을 읽었습니다 . 하지만 명령이 NetworkManager
내 시스템에서 현재 실행 중인 데몬을 나열하지 않기 때문에 명령이 모든 데몬을 나열한다고 생각하지 않습니다. Ubuntu 14.04
실행 중인 데몬을 나열할 수 있는 명령이 있습니까, 아니면 filesystem
데몬 자체에서 데몬을 찾을 수 있는 방법이 있습니까?
답변1
개념악마부착프로세스, 아니요문서. 따라서 "파일 시스템에서 데몬을 찾는 것"은 의미가 없습니다. 개념을 좀 더 명확하게 설명하자면, 프로그램은 실행 파일( 출력에 표시됨 ls
)이고, 프로세스는 해당 프로그램의 인스턴스( 출력에 표시됨 ps
)입니다.
이제 제가 제공한 정보를 활용하면내 대답, 실행 중인 데몬 프로세스를 다음과 같이 찾을 수 있습니다.제어 터미널을 연결하지 않고 실행 중인 프로세스 검색. 이는 다음을 통해 쉽게 수행할 수 있습니다 ps
.
$ ps -eo 'tty,pid,comm' | grep ^?
tty
프로세스에 제어 터미널이 없으면 출력 필드에 "?"가 포함됩니다.
시스템이 그래픽 환경을 실행할 때 큰 문제가 발생합니다. GUI 프로그램(예: Chromium)은 터미널에 연결되어 있지 않으므로 출력에도 나타납니다. 표준 시스템에서 루트는 그래픽 프로그램을 실행하지 않으며 단순히 이전 목록을 루트의 프로세스로 제한할 수 있습니다. 이는 ps
'switch'를 사용하여 달성 할 수 있습니다 -U
.
$ ps -U0 -o 'tty,pid,comm' | grep ^?
그러나 여기서는 두 가지 문제가 발생합니다.
- 루트가 그래픽 프로그램을 실행 중이면 해당 프로그램이 표시됩니다.
- 루트 권한 없이 실행되는 데몬은 그렇지 않습니다. 부팅 시 시작된 데몬은 일반적으로 루트로 실행됩니다.
기본적으로 우리는 원합니다터미널을 제어하지 않는 모든 프로그램을 표시하지만 GUI 프로그램은 표시하지 않습니다.. 다행히도 GUI 프로세스를 나열할 수 있는 프로그램이 있습니다: xlsclients
!slm의 답변모든 GUI 프로그램을 나열하기 위해 이를 사용하는 방법을 알려주지만, 이를 제외하고 싶기 때문에 이를 반대로 해야 합니다. 이는 스위치를 사용하여 수행할 수 있습니다 --deselect
.
먼저, 실행 중인 프로세스가 포함된 모든 GUI 프로그램 목록을 작성합니다. 방금 연결한 답변으로 볼 때 이는 다음을 사용하여 수행됩니다.
$ xlsclients | cut -d' ' -f3 | paste - -s -d ','
이제 명령 이름으로 선택할 수 있는 스위치 ps
가 있습니다 . -C
방금 명령 목록을 얻었으므로 이를 ps
명령줄에 삽입해 보겠습니다. 그런 다음 이것을 사용하여 --deselect
선택을 반전시킵니다.
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect
이제 우리는 GUI가 아닌 모든 프로세스의 목록을 갖게 되었습니다. "TTY 연결 없음" 규칙을 잊지 마십시오. 이를 위해 각 프로세스(및 전체 명령줄)가 출력 -o tty,args
되도록 이전 줄에 추가하겠습니다 .tty
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect -o tty,args | grep ^?
마지막은 grep
"?"로 시작하는 모든 줄, 즉 제어 tty가 없는 모든 프로세스를 캡처합니다. 그러면 그렇게 해! 마지막 줄은 제어 터미널 없이 실행되는 모든 비 GUI 프로세스를 제공합니다. 예를 들어 다음과 같이 개선할 수 있습니다.커널 스레드 제외(이건 프로세스가 아닙니다)...
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,args | grep ^?
...또는 읽을 수 있는 몇 가지 정보 열을 추가하세요.
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,uid,pid,ppid,args | grep ^?
답변2
최신 시스템을 운영하면서체계(Debian, Fedora, RedHat/CentOs 등을 기반으로 함) 이 명령은 systemctl
systemd가 제어하는 모든 것을 처리하는 데 사용됩니다. 따라서 서비스 목록을 얻으려면 다음을 수행할 수 있습니다.
systemctl | grep daemon
2022/10 편집: 좀 더 구체적으로 말하면 systemd
커널에서 처리되는 것들이 많이 있습니다. 실행해 보면 $ sudo systemctl -t help
알 수 있습니다.
서비스를 확인하려면 $ sudo systemctl --type=service
원하는 서비스를 실행하고 grep하십시오.
답변3
나는 "오래된" sysv initd용으로 작성했습니다. 배포판에서 실행되는지 확인해야 합니다.
좋은 유령은 /etc/initd에 시작 스크립트를 작성했습니다.
런레벨을 변경할 때 init는 어떤 데몬이 실행되고 있는지 어떻게 알 수 있나요?
디렉토리에서 이름을 찾습니다.
/var/lock/하위 시스템
그래서 당신은 할 수 있습니다
거기에서 목록을 가져오세요
실행 중인 모든 프로세스를 검사하고 이름이 목록에 있는지 확인하세요. 빙고!
모든 프로세스를 검색하려면 다음의 각 하위 디렉터리를 나열하세요.
/프로세스
이름이 숫자인 경우 실행 중인 프로세스의 pid입니다.
예를 들어, pid가 1234인 프로세스의 상태는 이 파일입니다.
/proc/1234/상태
그것을 열고 "이름:"으로 시작하는 첫 번째 줄을 가져옵니다.
바라보다
http://man7.org/linux/man-pages/man5/proc.5.html
https://linuxexplore.com/2014/03/19/use-of-subsystem-lock-files-in-init-script/
(죄송해요, 형식이 별로 좋지 않아서 핸드폰으로 썼어요...)
답변4
현재 실행 중인 모든 서비스(데몬이라고도 함)를 나열 하려면 systemd
다음 명령을 실행합니다.
sudo systemctl --type=service --state=active