URL: https://linuxfr.org/forums/linux-general/posts/script-ne-se-comportant-pas-pareil-selon-le-mode-de-lancement Title: Script ne se comportant pas pareil selon le mode de lancement Authors: Marotte ⛧ Date: 2017年04月30日T23:26:44+02:00 License: CC By-SA Tags: systemd, python et su Score: 2 Alors voilà. J’ai un script Python qui ne fork pas mais qui ne se termine pas (while true { do things; sleep }), lorsque je le lance en tant qu’utilisateur ainsi : `$ /path/to/python /path/to/script.py` le programme s’exécute bien au premier plan. Par contre, lorsque que je le lance ainsi (en étant root) : `# su - c '/path/to/python /path/to/script.py' user` le programme fork... Je ne comprends pas pourquoi et c’est pour ça que je fais appel à vous. Je me suis rendu compte de ce comportement en écrivant l’unit systemd du bousin. J’ai choisi Type=simple (c’est comme ça que je fais pour d’autres scripts qui fonctionnent pareil, sans problème...), j’ai mis un Restart et celui-ci a lieu. Je viens de tester comme on me l’a conseillé avec une unit Type=forking mais là ça fonctionne comme attendu : un `systemctl start truc.service` lance le script et ne me rend pas la main. À toute fin utile, une particularité de ce script est qu’il utilise les bibliothèques Python requests et multiprocessing avec une fonction globale ainsi écrite (je n’ai pas écrit la fonction, seulement le commentaire) : ```python from multiprocessing import Pool # http://stackoverflow.com/questions/32955846/in-python-is-there-an-async-equivalent-to-multiprocessing-or-concurrent-futures # # asyncio: not working (because my Post object is unhashable (it’s a list)) # gevent: not in the stdlib # # The chosen method, multiprocessing, may become a problem if you plan to federate thousands of pilings ! def async_map(f, iterable): with Pool(len(iterable)) as p: return p.map(f, iterable) ``` Pour résumer : quelle peut être la cause d’une différence de comportement d’un programme entre le lancer ainsi `$ prog`, ou ainsi `# su -c 'prog' user` ?