18 votes

Indiquez si le processus en cours d'exécution est exécuté sous Rosetta ou est natif M1 par ligne de commande

Si vous avez un Macbook basé sur M1, vous pouvez savoir si un processus en cours d'exécution sur la machine est Apple/M1 ou Intel/Rosetta dans l'Activity Monitor, mais existe-t-il un moyen d'obtenir cette information en ligne de commande?

J'aimerais être en mesure de montrer rapidement combien de processus Intel s'exécutent actuellement sur ma machine sous Rosetta.

Image de l'activité du moniteur montrant l'architecture

0 votes

Avez-vous une capture d'écran que vous pouvez partager de la sortie du moniteur d'activité?

0 votes

Il est certainement possible de le dire depuis le processus (voir developer.apple.com/documentation/apple-silicon/…) - c'est-à-dire, vous pouvez créer quelque chose qui est conscient de s'il fonctionne sous Rosetta ou non.

0 votes

@MrR: oui: ibb.co/VTspjVj Regardez la colonne "Architecture" sur le côté droit.

15voto

staffan Points 3299

TL, DR: fuser /usr/libexec/rosetta/runtime

Je sais comment voir quels processus ne sont pas natifs. Je ne sais pas comment distinguer entre différentes architectures non natives, mais en pratique il n'y en a qu'une

Un processus non natif a le runtime Rosetta ouvert. Vous pouvez utiliser fuser pour lister les processus qui ont un fichier donné ouvert. Vous pouvez utiliser lsof pour voir quels fichiers un processus donné a ouverts.

$ arch -x86_64 sleep 868686 &
[1] 65444
$ sleep 123123123 &
[2] 65446
$ fuser /usr/libexec/rosetta/runtime
/usr/libexec/rosetta/runtime: 65444
$ lsof -p65444 -p65446 | grep /usr/libexec/rosetta/runtime
sleep   65444 gilles  txt    REG   1,18    220064 1152921500312773394 /usr/libexec/rosetta/runtime

Vous aurez besoin de sudo pour voir les processus d'autres utilisateurs (mais normalement les processus système devraient être natifs).

4voto

Nopik Points 121

Voici un extrait pour vérifier tous les pids de Rosetta 2 et les inspecter :

ps -p `fuser /usr/libexec/rosetta/runtime | sed -e 's/.*: //' | sed -e 's/ /,/g'`

1 votes

Ou ps -p `fuser /usr/libexec/rosetta/runtime 2> /dev/null`

1 votes

ps: l'option nécessite un argument -p est retourné si aucun processus pid de rosetta n'est en cours d'exécution.

4voto

nohillside Points 82672

Cela peut effectivement être fait avec AppleScript si vous connaissez le PID du processus :

osascript -e 'tell application "System Events" to return architecture of processes whose unix id is 758'

1 votes

Encore mieux : vous pouvez faire osascript -e 'tell application "System Events" to return name of processes whose architecture is "x86_64"' pour obtenir les processus Intel, et osascript -e 'tell application "System Events" to return name of processes whose architecture is "arm64"' pour ceux d'Apple Silicon.

0voto

oandrew Points 31

Obtenez la liste des PIDs (un par ligne) :

fuser /usr/libexec/rosetta/runtime 2>/dev/null | xargs -n1

Vous pouvez ensuite l'utiliser pour filtrer avec grep :

ps aux | grep -f <(fuser /usr/libexec/rosetta/runtime 2>/dev/null | xargs -n1)

-1voto

Mr R Points 274

Vous pouvez certainement exclure certaines choses (allez au terminal). par exemple.

# ps -ef | grep -i firefox$
  502 56288     1   0 11Mar21 ??       207:43.89 /Applications/Firefox.app/Contents/MacOS/firefox

UTILISEZ le nom de l'exécutable et passez à la commande file.

# file /Applications/Firefox.app/Contents/MacOS/firefox
/Applications/Firefox.app/Contents/MacOS/firefox: Mach-O exécutable 64 bits x86_64

Donc si vous obtenez x86_64, cela doit fonctionner sous Rosetta - il n'a que l'architecture x86_64 (l'ancienne pour les pré-M1).

Sur une machine M1, certaines applications sont livrées avec des binaires universels - par exemple faites la même chose pour Safari et j'obtiens quelque chose comme ceci (désolé la machine est déconnectée du réseau .. c'est du TCP-over-ME donc peut ne pas être à 100% correct :-)

# file /Applications/Safari.app/Contents/MacOS/Safari
/Applications/Safari.app/Contents/MacOS/Safari: binaire universel Mach-O avec 2 architectures: [x86_64: exécutable 64 bits x86_64][arm64e: exécutable 64 bits arm64e]

.. et ensuite donne une sortie pour chaque architecture ... Selon Apple, il va "préférer" arm64e.

2 votes

Hors sujet, mais : "désolé la machine est air-gapped .. c'est du TCP-over-ME" Ce n'est pas une séparation physique !

3 votes

Cela montre uniquement pour quelles architectures un binaire est compilé, cela ne montre pas l'architecture sous laquelle il fonctionne.

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