Cet article est ancien, mais j'ai eu du mal avec cela, alors j'ai pensé que je pourrais aider. La raison pour laquelle le "\ from\ Google" ne fonctionne pas est que ce n'est pas le processus, il n'y a pas de "from Google" dans le nom du processus. Si vous faites :
ps -ef | grep "Backup\ and\ Sync"
Vous obtiendrez une sortie comme ceci :
501 37327 1 0 3:37PM ?? 0:06.37 /Applications/Backup and Sync.app/Contents/MacOS/Backup and Sync
Cela montre que le nom du processus ne contient pas "from Google". En fait, si vous regardez dans le répertoire des applications avec Finder et que vous faites un "obtenir des informations", il vous montrera le vrai nom de l'application. "Backup and Sync from Google" est juste une marque. J'ai vu la même chose avec d'autres applications. C'est AUSSI ce que osascript sait, donc vous pouvez faire :
osascript -e 'tell application "Backup and Sync" to activate'
et
osascript -e 'quit app "Backup and Sync"'
ce qui est plus élégant que kill.
Notez que si vous avez plusieurs utilisateurs configurés dans Backup and Sync, vous devrez trouver le PID du bon utilisateur, puis le tuer. C'est plus compliqué. J'ai un script pour ça, mais je n'ai plus plusieurs utilisateurs, donc je ne suis pas sûr que ça fonctionne toujours, mais pour ce que ça vaut, le voici. Je ne sais pas non plus quelles sont les résultats de l'appel osascript lorsque plusieurs utilisateurs sont impliqués.
fonction GoogleBackup {
s'il n'y a pas de paramètres, génère une erreur
if [ $# -lt 1 ] then echo "$(date): Mauvais appel de la fonction GoogleDrive" echo "$(date): Utilisation :" echo "$(date): GoogleDrive [start]"
echo "$(date): GoogleDrive [killall]"
echo "$(date): GoogleDrive [stop username]"
return 0 fi
googletrouvé=false
case $1 in
start)
#démarre Backup and Sync pour tous les utilisateurs
echo "$(date): Démarrage de Google Backup and Sync"
open /Applications/Backup\ and\ Sync.app
;;
stop)
#arrête Backup and Sync pour un utilisateur spécifié
# s'il n'y a pas de nom d'utilisateur (paramètre 2) spécifié, quitter
if [ $# -ne 2 ]
then
echo "$(date): Paramètres incorrects. Nom d'utilisateur Google requis"
return 0
else
#parcours chaque répertoire d'utilisateur Backup and Sync et recherche l'utilisateur pour obtenir le PID de ce processus
for chemin in $HOME/Library/Application\ Support/Google/Drive/user_*
do
# si ce n'est pas un répertoire, passer
[ -d "${chemin}" ] || continue
nomdossier="$(basename "${chemin}")"
#le fichier sync_log.log contient le nom d'utilisateur. Si le nom d'utilisateur est dans ce fichier journal, le fichier PID contient le processus à tuer
utilisateur=$(cat $HOME/Library/Application\ Support/Google/Drive/$nomdossier/sync_log.log | grep "Request (" | tail -1 | awk '{print $2}' | sed 's/[)(:]//g')
# vérifier si l'utilisateur dans le fichier journal correspond à l'utilisateur spécifié
if [ "$utilisateur" == "$2" ]
then
#Si l'utilisateur correspond, obtenir le PID à tuer
pidatuer=$(cat $HOME/Library/Application\ Support/Google/Drive/$nomdossier/pid)
# s'assurer que le PID est en cours d'exécution ET que c'est un processus Backup and Sync (réduit le risque de PID recyclé)
if ps -p $pidatuer | grep "Backup\ and\ Sync" > /dev/null
then
echo "$(date): Arrêt de la sauvegarde et de la synchronisation pour l'utilisateur $utilisateur"
kill -quit $pidatuer
else
echo "$(date): L'utilisateur Google Backup and Sync $utilisateur n'est pas en cours d'exécution"
fi
googletrouvé=true
fi
done
# si l'utilisateur spécifié n'est pas trouvé, enregistrer une erreur et fournir une liste des utilisateurs connus
if ! $googletrouvé
then
echo "$(date): Utilisateur $2 non trouvé. Utilisateurs incluent :"
for chemin in $HOME/Library/Application\ Support/Google/Drive/user_*
do
[ -d "${chemin}" ] || continue
nomdossier="$(basename "${chemin}")"
echo "$(date): $(cat $HOME/Library/Application\ Support/Google/Drive/$nomdossier/sync_log.log | grep "Request (" | tail -1 | awk '{print $2}' | sed 's/[)(:]//g')"
done
fi
fi
;;
killall)
echo "$(date): Arrêt de Google Backup and Sync TOUS les utilisateurs"
# Journalise les utilisateurs en cours d'exécution et ceux qui ne le sont pas
for chemin in $HOME/Library/Application\ Support/Google/Drive/user_*
do
[ -d "${chemin}" ] || continue
nomdossier="$(basename "${chemin}")"
utilisateur=$(cat $HOME/Library/Application\ Support/Google/Drive/$nomdossier/sync_log.log | grep "Request (" | tail -1 | awk '{print $2}' | sed 's/[)(:]//g')
if [ "$utilisateur" != "" ]
then
pidatuer=$(cat $HOME/Library/Application\ Support/Google/Drive/$nomdossier/pid)
if ps -p $pidatuer | grep "Backup\ and\ Sync"> /dev/null
then
echo "$(date): Arrêt de la sauvegarde et de la synchronisation pour l'utilisateur $utilisateur"
googletrouvé=true
else
echo "$(date): L'utilisateur Google Backup and Sync $utilisateur n'est pas en cours d'exécution"
fi
fi
done
# Arrête réellement tous les utilisateurs si nous en avons trouvé qui sont en cours d'exécution, sinon indique simplement qu'ils sont tous arrêtés
if $googletrouvé
then
killall Backup\ and\ Sync > /dev/null
else
echo "$(date): Aucun processus Google Backup and Sync n'était en cours d'exécution"
fi
;;
*)
echo "$(date): Mauvais appel de la fonction GoogleDrive"
echo "$(date): Utilisation :"
echo "$(date): GoogleDrive [start]"
echo "$(date): GoogleDrive [stopall]"
echo "$(date): GoogleDrive [stop username]"
return 0
;;
esac
}
(Le $(date) dans l'écho est parce que cela s'exécute en arrière-plan au démarrage basé sur les connexions wifi et la sortie va dans un fichier journal.)
Désolé si je ne réponds pas de la "bonne façon" car c'est mon premier message.