Thunderbird를 실행하는 runthunderbird라는 bash 스크립트가 있습니다.
#!/bin/bash
sleep 5
thunderbird & disown
krunner에서 실행 하면 runthunderbird
Thunderbird는 예상대로 5초 후에 시작된 다음 Plasma 5.27.10 System Monitor의 프로세스 목록에 표시된 대로 프로세스가 종료됩니다 runthunderbird
.ps -ef
그러나 동일한 시스템 모니터에는 여전히 Thunderbird의 리소스(예: 메모리) 소비를 나열하는 응용 프로그램 탭이 있습니다 runthunderbird
.thunderbird-bin
스크립트가 종료되기 전에 Thunderbird뿐만 아니라 여러 그래픽 응용 프로그램을 실행하는 경우 응용 프로그램 탭에서 다시 (종료하는) 스크립트 이름 아래에 함께 그룹화됩니다.
이게 어떻게 관리되는지, 썬더버드를 스크립트에서 실행하는 것이 아니라 스크립트와 완전히 분리하려면 어떻게 스크립트를 작성해야 하는지 궁금합니다.
또한 이 사실이 runthunderbird 스크립트가 ~/.config/autostart
.
답변1
cgroups 및 systemd를 통해 관리됩니다. (즉, 확인을 위해 여기에 KDE가 설치되어 있지는 않지만 cgroups 및 systemd를 통해 관리되고 있다고 95% 확신합니다.)
최근 GNOME과 KDE는 모두 사용자 수준 서비스 관리자가 실행 중인 경우 데스크탑 응용 프로그램을 시작하기 위해 .services 및 .scopes의 동적 생성에 대한 systemd 지원을 사용하기 시작했습니다 systemd --user
. 이는 Linux를 기반으로 합니다.그룹기능 – 각 systemd .service 또는 .scope는 Linux cgroup에 해당합니다. (Cgroup은 systemd보다 이전 버전이지만 이전에는 거의 사용되지 않았습니다.)
애플리케이션 프로세스가 생성되면 systemd에 이를 임시 .scope 단위(및 해당하는 새 cgroup)로 이동하도록 요청합니다. 작업 관리자는 나중에 각 프로세스의 cgroup 이름을 확인 /proc/<PID>/cgroup
하고 여기에서 리소스 값을 읽을 수 있습니다 /sys/fs/cgroup
(또한 각 cgroup 내의 PID 목록도 제공합니다).
생성된 cgroup 트리를 살펴보거나 systemd-cgls
각 cgroup에 대한 리소스 측정의 예를 확인하십시오. 예를 들어 htop 또는 ps에 "Systemd Unit" 열을 추가할 수도 있습니다 .loginctl user-status
systemd-cgtop
ps -e -o pid,cmd,unit,uunit
각 그룹에 대해 생성된 별도의 cgroup을 볼 수도 있습니다.터미널 탭; 이제 GNOME 터미널(libvte)과 tmux가 이 작업을 수행할 수 있으며 Konsole도 이를 수행할 수 있다고 들었습니다. (그 외에도 각 탭에 자체 작업 제한이 있을 수 있습니다. 저는 GNOME 터미널에서 "bash smiley" 포크밤을 성공적으로 실행했으며 나머지 시스템은 계속 실행됩니다.)
이게 어떻게 관리되는지, 썬더버드를 스크립트에서 실행하는 것이 아니라 스크립트와 완전히 분리하려면 어떻게 스크립트를 작성해야 하는지 궁금합니다.
Cgroup은 a) 서비스를 시작하여 생성됩니다. b) systemd-run --user
Thunderbird를 "분리"하려면 다음을 사용할 수 있습니다.
systemd-run --user [--scope] --collect /bin/thunderbird
(...또는 시스템에 실제 "thunderbird.service"를 생성 ~/.config/systemd/user/
하고 systemctl --user start
.
GNOME 및 KDE의 기능과 더 유사하게 사용 --scope
하고 만드십시오. -u/--unit="app-foo-bar"
Systemd-run은 기본적으로 .service를 생성합니다. 차이점은 .service 단위는 항상 systemd 자체에 의해 프로세스를 생성하는 반면 .scope를 사용하면 호출자가 이미 실행 중인 프로세스를 이동할 수 있다는 것입니다.
이는 또한 범위 모드에서는 명령을 &
정상적으로 실행하지 않는 한 "포그라운드에서" 계속 실행되는 반면, 서비스 모드에서는 항상 "백그라운드에서" 실행되며 -t/--pty
실행하려는지 명시적으로 물어봐야 함을 의미합니다. 대화형 터미널 응용 프로그램 또는 -P/--pipe
프로그램이 반드시 대화형일 필요는 없지만 여전히 출력을 보고자 합니다. 그렇지 않으면 모든 표준 출력이 시스템 로그(journalctl)로 이동됩니다.
이는 -G/--collect
오래된 장치가 주변에 머무르는 것을 방지할 뿐입니다.
Systemd-run을 사용하면 전체 시스템에 대한 OOM 위험 없이 잠재적으로 큰 작업에 대한 cgroup 수준 메모리 제한을 지정할 수 있습니다. 매개변수를 참조하세요 -p/--property
.