Quando você executa su
, o shell é substituído pelo processo su
. su
, em seguida, forks e execs bash
. bash
configura o redirecionamento de saída e, em seguida, forks e execs env
. env
procura o PATH, localiza python
e o executa. Então você fica com três processos, 1) su
, esperando que bash
saia, 2) bash
, esperando que python
(anteriormente env
) saia e 3) python
, que está ocupado com o seu script.
Não há nada de errado com isso. su
é a maneira consagrada pelo Unix de trocar temporariamente os usuários, e é isso que você deve usar. Da mesma forma, a maneira de executar uma linha de comando é usar um shell, portanto su
é executado bash
e permite bash
tratá-lo. Novamente, isso segue a abordagem geral da caixa de ferramentas Unix, permitindo que o shell faça o que o shell é bom, e não reinventando a linha de comando do shell e a funcionalidade de pesquisa PATH em outro aplicativo.
Além disso, como o bash
já está fazendo a pesquisa PATH, é possível desativar o uso de env
e invocar python
diretamente.