Existe-t-il un moyen de «rattacher» un processus à la table de travail des coques après qu'il a été «désavoué»?
Edit: $ SEARCHENGINE me manque totalement. Ça n'a pas l'air trop beau.
Compte tenu du fonctionnement des travaux Linux et de la propriété des processus, je crains qu'il ne soit pas vraiment possible de devenir propriétaire d'un processus sans l'aide du processus d'adoption.
Un parent peut «renier» un enfant, qui est ensuite «adopté» par le processus nommé «init». La sécurité du système empêche quelqu'un de saisir les processus de quelqu'un d'autre. Lorsque vous le reniez, un processus devient le contrôle de quelqu'un d'autre (init). En tant qu'utilisateur, vous pouvez toujours tuer le processus, mais vous ne pouvez pas le récupérer. Il est peu probable que tenter de contraindre init à renvoyer votre processus fonctionne, car init ne lit même pas le courrier.
Aussi méchant que cela puisse paraître, cela se résume vraiment à la réponse "Ne fais pas ça!".
reptyr
(voir ma réponse pour un exemple d'utilisation).Bien que je suppose que cela n'aide personne dans la situation malheureuse d'avoir renié le mauvais processus, si vous deviez bannir le reniement de votre flux de travail et le remplacer par:
https://github.com/nelhage/reptyr
Vous seriez en mesure de réparer n'importe quel processus (c'est-à-dire de le déplacer à l'intérieur de l'écran).
la source
reptyr
est la solution, mais il n'est pas nécessaire d'arrêter d'utiliserdisown
. Pour plus de clarté, j'ai écrit une nouvelle réponse.Tout ce dont vous avez besoin est
reptyr
. Il vit sur GitHub et a été empaqueté pour Debian depuis Wheezy, et probablement aussi pour d'autres distributions GNU / Linux. Il mettra en avant votre processus désavoué dans le terminal actuel si vous l'invoquez avec son ID de processus (PID). Ainsi, par exemple:la source
Non désolé. En principe, cela serait possible, car le désaveu modifie simplement un état interne du shell - il supprime fondamentalement l'ID de processus d'une liste, et il pourrait être remis sans trop de tracas (vous devriez être un peu prudent en testant que le pid réattaché est dans la bonne session, mais ce n'est pas insurmontable). Mais aucun des shells habituels (bash, ksh, tcsh, zsh) ne semble avoir un moyen de rajouter. (Même si avec zsh , vous pouvez écrire au
jobstates
,jobdirs
et lesjobtext
tableaux associatifs, je ne sais pas combien vous pouvez obtenir de cette façon.)Si vous voulez que le shell envoie des signaux au processus refusé comme il le fait pour ses sous-processus possédés, vous pouvez écrire un travail de remplacement qui attend jusqu'à ce qu'il reçoive un signal et envoie le même signal au processus refusé. Vous pouvez envoyer
SIGSTOP
etSIGCONT
au processus désavoué pour simuler Ctrl+ Zetbg
. Rien de tout cela ne sera aussi pratique que de reprendre possession.la source
Quelles sont les circonstances? Si vous souhaitez simplement récupérer votre terminal pendant un certain temps, vous pouvez utiliser GNU Screen à la place. Il ne détache pas tout à fait le processus d'un terminal - Screen en émule un pour le bénéfice du processus - mais vous pouvez l'attacher et le détacher du vrai terminal que vous utilisez. Vous pouvez même détacher un écran, vous déconnecter, puis vous reconnecter et vous reconnecter au même écran.
la source