Comment détecter quand un processus démarre sur macOS?

1

Ce que j'essaie de faire est de: tuer un processus quand il démarre. Je voudrais donc savoir comment détecter le début d’un processus? Ou comment empêcher un processus ou une application de démarrer?

Toute suggestion serait appréciée?

Vincent
la source
Y a-t-il un processus particulier que vous souhaitez traiter? Voulez-vous tuer le processus ou l'empêcher de déclarer?
Mark
@Mark Il n'y a pas de processus particulier. Il serait préférable de l’empêcher de commencer.
Vincent
La chose évidente à faire est de supprimer l'exécutable - Cela ressemble à un problème XY, qu'est-ce que vous essayez de faire. Certains processus sont redémarrés automatiquement s'ils sont tués plusieurs fois après 5 secondes (comme dans la réponse), trop tard, ils ont fait le mal. Il est préférable d’attaquer le problème d’une autre manière
Mark

Réponses:

1

Créer l'application

Ouvrez-le dans l'éditeur de script, exportez-le en tant qu'application en lecture seule et assurez-vous de rester ouvert après la désactivation du gestionnaire d'exécution .

Après l'exportation, suivez ce guide pour l'empêcher de s'afficher dans le Dock.

# Block Apps By Josh Brown
# Last Modified: Aug 23 2018
global applist

on run
    set applist to {"Google Chrome", "App Store"} -- Apps to limit
    if checkapps() then
        killall()
    end if
end run
on is_running(appName)
    try
        if (the length of (do shell script "pgrep -x " & quoted form of appName) > 0) then
            kill(do shell script "pgrep -x " & quoted form of appName)
        end if
    end try
end is_running

on checkapps()
    set x to false
    repeat with a from 1 to length of applist
        is_running(item a of applist)
    end repeat
    return x
end checkapps

on kill(theID)
    do shell script "kill -9 " & theID
end kill

Créer le LaunchDaemon

Remarque: vous devez être un administrateur pour le faire.

Enregistrez le fichier suivant dans /Library/LaunchDaemons/

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.PlzUpvoteMy.answer</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/bin/open</string>
            <string>-W</string>
            <string>**/path/to/application.app**</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>5</integer>
        <key>UserName</key>
        <string>**UserToBlock**</string>
    </dict>
</plist>

Changez les permissions avec la commande suivante:

sudo chown root:wheel /Library/LaunchDaemons/com.MyName.plist

Charger le démon

Note: Vous devez être administrateur pour faire cela.

Pour démarrer le démon, utilisez cette commande:

sudo launchctl load /Library/LaunchDaemons/com.MyName.plist 

Le programme recherchera les applications toutes les 5 secondes et les fermera si elles sont en cours d'exécution.

Pour arrêter le démon, utilisez cette commande

sudo launchctl unload /Library/LaunchDaemons/com.MyName.plist 
JBis
la source
Merci, @JBis. Je ne cherche pas à savoir quel processus est en cours d'exécution. J'essaie d'empêcher un processus de s'exécuter ou de démarrer. Si c'est impossible, j'essaie de trouver un moyen de tuer un processus une fois démarré.
Vincent
@ user174782 S'il vous plaît vérifier le lien. Si vous définissez une limite de temps à 0 / modifiez le code selon vos besoins, il fera exactement ce que vous cherchez
JBis
Très bon travail, @JBis. Un moyen de le garder à l'arrière-plan? Pour que le script démarre au démarrage du système. Et l'ajouter aux éléments de connexion de l'utilisateur n'est pas une bonne idée, car les gens vont l'enlever, vous savez.
Vincent
@ user174782 Oui. En fait, j'aurais du y penser avant. Je vais ajouter cette partie dans environ une heure (sur mobile maintenant).
JBis
Cool. Ce serait reconnaissant. S'il vous plaît prenez votre temps. Pas pressé.
Vincent