#! / usr / bin / env и имена процессов: переносимость по цене?

Есть много хороших причин для использования #! / usr / bin / env. Итог: это делает ваш код более переносимым. Ну вроде. Проверьте это ....


У меня есть два почти идентичных сценария, bintest.py

#! /usr/bin/python
import time
time.sleep(5*60)

и envtest.py

#! /usr/bin/env python
import time
time.sleep(5*60)

Обратите внимание, что они отличаются только своими шебангами ].


bintest.py работает, как ожидалось

br@carina:~$ ./bintest.py & ps && killall bintest.py
[1] 15061
  PID TTY          TIME CMD
14625 pts/0    00:00:00 bash
15061 pts/0    00:00:00 bintest.py
15062 pts/0    00:00:00 ps
br@carina:~$ 
[1]+  Terminated              ./bintest.py

, но envtest.py делает что-то менее оптимальное

br@carina:~$ ./envtest.py & ps && killall envtest.py
[1] 15066
  PID TTY          TIME CMD
14625 pts/0    00:00:00 bash
15066 pts/0    00:00:00 python
15067 pts/0    00:00:00 ps
envtest.py: no process found
br@carina:~$ killall python
br@carina:~$ 
[1]+  Terminated              ./envtest.py

Мы видели, что при использовании #! / usr / bin / env заставил процесс получить имя «python», а не «envtest.py», что сделало наш killall неэффективным. На каком-то уровне кажется, что мы обменяли один вид переносимости на другой: теперь мы можем легко менять интерпретаторы Python, но мы потеряли «возможность уничтожения» в командной строке. Что с этим?

6
задан Community 23 May 2017 в 12:13
поделиться