Voici la situation:
En travaillant sur (la prochaine version de) un éditeur de liste rapide Unity, je voudrais ajouter un moyen fiable de "redémarrer" les icônes de lanceur. Pour ce faire, je dois supprimer l'icône (édition de gsettings) et la replacer à la même position. Jusqu'à présent, pas de problème. Toutefois, si l'application en question est en cours d'exécution, l'utilisateur risque de perdre des données, car l'application se ferme lorsque son icône est supprimée du programme de lancement. Ce qu'il me faut, c'est un moyen fiable de trouver le nom du processus d'une application, de permettre à l'éditeur de vérifier la liste des processus en cours si l'application est en cours d'exécution et d'envoyer un message d'avertissement à l'utilisateur lui indiquant que l'icône ne peut pas être redémarrée si l'application est en cours d'exécution.
Ce que j’ai fait jusqu’à présent, c’est que l’éditeur a examiné le fichier de bureau, lu la commande, également lu la commande, supprimée de la section des répertoires, ainsi que les éventuels scripts distants auxquels la commande de fichier de bureau pourrait faire référence, en recherchant les chaînes commençant par avec "./"
Bien que la méthode semble bien fonctionner avec toutes les applications sur lesquelles je l'ai testée, j'ai le sentiment qu'il doit exister un moyen plus simple de traiter le problème de manière "tout en un" ...
Y a-t-il?
Des suggestions pour attraper des situations plus exceptionnelles sont les bienvenues!
Il n'y a aucun moyen de résoudre ce problème dans le cas général. Quel que soit le mécanisme que vous proposiez, je pense qu’il sera toujours possible d’écrire un processus qui vous échappera, à moins que vous ne modifiiez la façon dont les processus sont lancés pour les suivre de cette manière.
Upstart doit faire face exactement au même problème pour savoir si les démons sont toujours en cours d'exécution et les auteurs de travaux en amont doivent spécifier les détails (le nombre de fourchettes) à suivre par Upstart. Étant donné que le parvenu ne peut pas gérer sans aide, je ne pense pas que vous puissiez le faire non plus. Et Upstart contrôle même la manière dont les processus sont lancés, ce que je ne pense pas que vous soyez ici.
Je pense que le mieux que vous puissiez faire est ce que vous faites déjà. Regarder /proc/<pid>/stat
et /proc/<pid>/cmdline
est un moyen assez général, mais ne permet toujours pas de saisir tous les cas. La commande pgrep
résout ce problème. Si vous n'utilisez pas déjà pgrep
, jetez un coup d'œil à la page de manuel pgrep pour connaître les options qui s'opposent.
Cela dit, je ne suis pas convaincu que vous devez vraiment faire cela au départ. Si vous ne pouvez pas suivre le processus, je ne vois pas comment Unity pourrait le faire non plus. Une meilleure approche ne serait-elle pas d’éliminer les blocages d’application en premier lieu? J'examinerais en détail pourquoi vos applications se bloquent (c'est sûrement un bogue quelque part?), Plutôt que d'essayer de le contourner comme vous l'avez décrit. Je me demande si cela ne concerne que les applications compatibles avec Unity qui rappellent Unity pour fonctionnalité supplémentaire via DBus ?
La commande xprop
(suivie de la touche Alt de la fenêtre de l'application appropriée, puis cliquez une fois dans la fenêtre) semble faire l'affaire pour moi.