krunnerが管理するwrtプロセスで「アプリケーション」をどのように実行しますか?

krunnerが管理するwrtプロセスで「アプリケーション」をどのように実行しますか?

Thunderbird を実行する runthunderbird という bash スクリプトがあります。

#!/bin/bash
sleep 5
thunderbird & disown

krunnerで実行すると、runthunderbirdThunderbirdは予想どおり5秒後に起動し、Plasma 5.27.10 System Monitorのプロセスリストに示すようにプロセスが終了しますrunthunderbirdps -ef

ただし、同じシステムモニタにはまだThunderbirdのリソース(メモリなど)の消費を一覧表示する[アプリケーション]タブがありますrunthunderbirdthunderbird-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-statussystemd-cgtopps -e -o pid,cmd,unit,uunit

各グループに対して作成された別々のcgroupを表示することもできます。ターミナルタブ;これで、GNOME端末(libvte)とtmuxがこれを行うことができ、Konsoleもこれを行うことができると聞きました。 (それに加えて、各タブに独自のタスク制限がある可能性があります。私はGNOME端末で「bash smiley」フォークバームを正常に実行し、残りのシステムは引き続き実行されます。)

これがどのように管理されているか、サンダーバードをスクリプトで実行するのではなく、スクリプトから完全に分離するには、スクリプトを作成する必要があるかどうか疑問に思います。

Cgroup は a) サービスを開始することによって生成されます。 b) systemd-run --userThunderbird を「分離」するには、以下を使用できます。

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

おすすめ記事