cgroups / systemd: Como criar um cgroup para uma árvore de processos [non-root]

4

Como usuário não-root, gostaria de iniciar um processo que iniciará vários outros processos (pense em uma sessão 'make' ou na maneira como o Google Chrome inicia um processo para cada guia) e ter toda a árvore de processos visível como uma unidade - por exemplo, quero ver que essa subárvore está consumindo 200% da CPU. Eu tenho acesso ao sudo, mas prefiro não usá-lo.

O equivalente mais próximo que eu tenho é systemd-run --scope , mas não consigo encontrar a árvore de processos ou o escopo em systemd-cgls ou equivalente. Além disso, isso tem que ser executado como root, então eu teria que sudo, em seguida, descartar privilégios com um wrapper. Existe uma maneira melhor de fazer isso? Debian Jessie idealmente, ou Stretch se eu precisar. Quanto mais simples a solução, melhor, isso me permitiria implantá-la em vários computadores sem problemas de manutenção.

    
por rosuav 17.07.2016 / 03:15

1 resposta

5

Você não precisa ser root para iniciar um grupo com escopo no usuário com systemd-run :

$ systemd-run --user --scope /bin/bash 
  Running scope as unit run-23318.scope.
  $ sleep 999 &
  [1] 23369

Você pode ver a unidade:

$ systemctl --user status run-23318.scope
* run-23318.scope - /bin/bash
  Loaded: loaded (/run/user/1000/systemd/user/run-23318.scope; static; 
         vendor preset: enabled)
 Drop-In: /run/user/1000/systemd/user/run-23318.scope.d
      '-50-Description.conf
  Active: active (running) since Sun 2016-07-17 08:16:51 CEST; 10min ago
  CGroup: /user.slice/user-1000.slice/[email protected]/run-23318.scope
      |-23318 /bin/bash
      '-23369 sleep 999
  Jul 17 08:16:51 home systemd[1056]: Started /bin/bash.
  Jul 17 08:16:51 home systemd[1056]: Starting /bin/bash.

e também com

$ systemd-cgls /user.slice/user-1000.slice/[email protected]/run-23318.scope
   /user.slice/user-1000.slice/[email protected]/run-23318.scope:
   |-23318 /bin/bash
   '-23369 sleep 999
    
por 17.07.2016 / 08:46