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
。