Высокий уровень
Нет, "launchctl unload" в OSX не передает "ProgramArguments" целевому приложению.Он удаляет plist из тех, которые запускает launchd.
Короткий ответ
Я не уверен, что вы используете launchctl и запустили так, как это было задумано, но попробуйте:
launchctl load /path/to/stop.plist
Более длинный ответ
Команда launchctl используется для управления тем, какие списки запускается launchd в любой момент времени.Когда вы выдаете:
launchctl load /path/to/start.plist
, список загружается в launchd, и ваш "ourapp" срабатывает.Критическим моментом является то, что если "ourapp" не выгружает start.plist, он все равно будет работать в launchd.Вы можете проверить это, просмотрев выходные данные:
launchctl list
Причина, по которой ваш вызов для выгрузки файла stop.plist не имел никакого эффекта, заключается в том, что он никогда не загружался в launchd с самого начала.Чтобы остановить его, вы должны сначала запустить его с:
launchctl load /path/to/stop.plist
Хитрость заключается в том, что, как только вы это сделаете, будут запущены и ваши start.plist и stop.plist.Очевидно, я не проверял ваше приложение / настройку, но это может вызвать странное поведение.Кроме того, я не уверен, что снова запустит «load» в вашем start.plist, так как он уже будет запущен.
Из того, что вы здесь описали, похоже, что launchd и launchctl могут быть не лучшим подходом.Если вы хотите придерживаться этого, я думаю, вам нужно будет добавить системные вызовы в ваш «ourapp», чтобы при получении команды kill он также выгружал как старт, так и стоп лист.Или напишите прокси-скрипт, который выгружает списки и затем вызывает ваш «ourapp -k».Таким образом, в следующий раз, когда вы используете "launchctl load /path/to/start.plist", вы не будете пытаться запустить то, что уже запущено.
Еще одна заметка.Возможно, вы просто использовали «ourapp» в качестве заполнителей, но стоит отметить, что вы, вероятно, хотите использовать уникальные имена Label.Если ничего другого, это поможет вам отслеживать их с помощью "launchctl list".Я не знаю, будет ли у launchd проблема с дублирующимися именами, но кажется, что безопаснее всего избежать этой возможности.