0 votes

Comment trouver l'identifiant du processus pour l'instance d'application créée par la commande "open" ?

Quand je programme open -F -W -n -g -a /Applications/Safari.app/Contents/MacOS/Safari https://kernel.org j'ai récupéré le processus de open et son pid 93930.

Mais ce n'est pas le processus (93931) de l'instance Safari nouvellement créée elle-même.

huocp 93931   0.0  1.9  6047904 160240   ??  S    11:55am   0:04.39 /Applications/Safari.app/Contents/MacOS/Safari
huocp 93930   0.0  0.1  4340272  12212 s004  S+   11:55am   0:00.07 open -F -W -n -g -a /Applications/Safari.app/Contents/MacOS/Safari https://kernel.org

Maintenant, je n'ai aucun moyen de fermer le processus Safari par programmation. Je peux fermer le open programme le processus en tuant 93930, mais il laisse 93931 en marche.

La question est donc la suivante : existe-t-il un moyen d'obtenir le pid de l'instance d'application créée par open commande ?

93931 (safari) n'est même pas un processus enfant de 93930 (open), j'ai essayé avec la commande pstree.

1 votes

Juste un FWI, open -FWnga Safari https://kernel.org fait la même chose que le commande que vous avez montrée, pas besoin de la dessiner comme vous l'avez fait. Si vous cherchez à fermer la dernière occurrence ouverte de Safari, c'est ce qu'il faut faire : kill -nx Safari Cependant, la prochaine fois que vous utiliserez l'option susmentionnée open commande le -F option seront ignorés. En d'autres termes, la prochaine fois, il y aura deux onglets pour https://kernel.org .

0 votes

@user3439894 le mac kill est une version bsd, il semble qu'il ne connaisse pas l'existence de -nx mais pgrep fait l'affaire.

1 votes

pkill -nx Safari le fera. kill était une erreur de frappe de ma part, que j'ai manquée lorsque j'ai copié le texte à partir du terminal après l'avoir testé.

2voto

The_Lucifer Points 332

Question similaire sur StackOverflow

Si vous faites cela par programme, une façon d'obtenir le pid de l'application ouverte (et de l'utiliser ensuite pour tuer le processus) est d'obtenir la sortie grep de ps aux en lui passant le nom de l'application.

ps aux | grep -v grep | grep -I <AppName> | sort -rn | head -1 | awk '{print $2}'

En fait, il s'agit d'acheminer la sortie de la fonction ps aux par grep et le trier en fonction de la valeur de la colonne de l'heure de début.

Comme indiqué par @user3439894 ci-dessous, il existe un moyen plus facile sans le charabia ci-dessus.

pgrep -nx Safari

retourne le PID de la dernière instance ouverte de Safari et

pkill -nx Safari

tue la dernière instance ouverte de Safari.

0 votes

Merci ! Mais cette solution n'est pas suffisante, j'ai plusieurs instances de safari en cours d'exécution. Le site open -n va créer une nouvelle instance de safari qui est la seule que je veux tuer.

1 votes

Il n'est absolument pas nécessaire de se lancer dans un tel cirque avec la commande composée que vous avez montrée ! Par exemple pgrep -nx Safari fait la même chose sans le charabia. En outre, si l'objectif est de fermer la dernière occurrence ouverte de Safari, par exemple, alors kill -nx Safari le fait.

0 votes

Oh, super. Je vais mettre à jour ma réponse.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X