L'identifiant parent du process orphelin n'est pas 1 lorsque le process parent est exécuté à partir du terminal GNOME

Je lance un nouveau process à partir de GNOME Terminal, puis ce process fourche un enfant. Mais quand j'ai tué le process parent, l'identifiant parent du process orphelin est devenu quelque chose d'autre que 1 qui représente init --user pid.
Quand je le fais dans des terminaux virtuels, le parent pid est 1 qui représente le process init .
Comment puis-je exécuter un nouveau process à partir du terminal GNOME de sorte que quand il est mort, le parent pid du process enfant est devenu 1 et non le pid du process init --user ?
Merci beaucoup.

J'ai déjà répondu à une question similaire il y a quelques mois. Donc, voyez-le d'abord pour les détails techniques. Ici, je vais juste vous montrer comment votre situation est couverte par cette réponse.

Comme je l'ai expliqué, moi-même et d'autres auteurs de divers utilitaires de supervision de dæmon profitent de la façon dont Linux fonctionne maintenant , et ce que vous voyez est cette chose même dans l'action, presque exactement comme je l'ai exposé.

La seule information manquante est que init --user est votre instance de session upstart. Il est démarré lorsque vous vous connectez pour la première fois à une session et que vous vous arrêtez lorsque vous vous déconnectez. Il est là pour vous d'avoir des tâches par session (similaires, mais pas identiques, aux agents users de MacOS 10 sous launchd ) de votre choix.

Il y a quelques années, les gens d'Ubuntu sont allés convertir des systèmes de bureau charts pour employer des travaux par session optimisés. Votre terminal GNOME est démarré en tant que travail par session, et tous les enfants orphelins sont hérités par le sous-greffier le plus proche, qui est bien sûr votre instance par session d'upstart.

Depuis quelques mois, les users de systemd travaillent exactement la même chose en configurant GNOME Terminal pour exécuter des tabs individuels en tant que services systemd séparés, à partir d'une instance par user de systemd. (Vous pouvez dire que votre question porte sur upstart, pas sur systemd, car sur un système systemd le process sub-reaper serait systemd --user .)

Comment puis-je exécuter un nouveau process à partir du terminal GNOME pour que le PID parent du process enfant devienne 1 et non le PID du process d'initialisation de la session ubuntu?

C'est intentionnellement dur. Les gestionnaires de services veulent suivre les process enfants orphelins. Ils ne veulent pas les perdre au process # 1. Donc, le précis rapide est: Arrêtez d'essayer de faire cela.

Si vous requestz uniquement parce que vous pensez que votre process devrait avoir un ID de process parent de 1, alors vous sevrer de cette idée.

Si vous pensez à tort que c'est un aspect d'être un dæmon, notez que les dæmons ayant des ID de process parent de 1 n'ont pas été garantis (et sur certains Unices, pas vrai sur tout le système) depuis l'avènement de choses comme la ressource système d'IBM Contrôleur et daemontools de Bernstein dans les années 1990. En tout cas, on ne peut pas être un dæmon en doublant dans une session de connection. C'est depuis longtime connu pour être une idée à moitié cuite.

Si vous pensez à tort que c'est un truisme pour les process orphelins de l'enfant, lisez à nouveau ma réponse précédente. L'absolutisme que les enfants orphelins sont re-parentés au process n ° 1 est faux, et a eu tort pendant plus de trois ans, au moment où nous écrivons ceci.

Si vous avez un process enfant qui pour une raison bizarre a vraiment besoin de cela, alors découvrez ce que cette raison bizarre est et le faire réparer. C'est probablement un bug, ou quelqu'un qui fait des hypothèses de design invalides. Quelle que soit la raison, le monde de la gestion de dæmon a changé dans les années 1990, et Linux a également changé il y a quelques années. Il est time de se rattraper.

Plus de lecture

  • "Session Init" . upstart livre de recettes . Ubuntu.
  • James Hunt, Stéphane Graber, Dmisortingjs Ledkovs et Steve Langasek (2012-11-12). "Renouveler les tâches user et le suivi PID" . Ubuntu Rarer les sessions user upstart . Ubuntu.
  • Nathan Willis (2013-04-17). Démarrage pour les sessions user . LWN.
  • systemd . pages de manuel systemd. freedesktop.org.