Свифт автозапуска по процессу - PullRequest
0 голосов
/ 02 октября 2019

Я новичок в Swift, так что извините, если что-то кажется очевидным, но я не могу понять следующее. Я пытаюсь выполнить команду терминала из моего приложения в бесконечном цикле while. Мой код выглядит следующим образом:

import Cocoa

class ViewController: NSViewController {

    func test() {
        let sleepProcess = Process()
        sleepProcess.executableURL = URL(fileURLWithPath: "/bin/echo")
        sleepProcess.arguments = ["test"]
        try? sleepProcess.run()
        sleepProcess.waitUntilExit()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        while true {
            test()
        }

    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

}

Проблема в том, что приложение, когда я открываю монитор активности, открывает более 1000 портов за считанные секунды запуска приложения (из-за запуска процесса).

Я обнаружил, что мне нужно использовать autoreleasepool для освобождения этих портов, чтобы они не оставались открытыми. Это то, что я пробовал, но все равно порты остаются открытыми:

import Cocoa

class ViewController: NSViewController {

    func test() {
        let sleepProcess = Process()
        sleepProcess.executableURL = URL(fileURLWithPath: "/bin/echo")
        sleepProcess.arguments = ["test"]
        try? sleepProcess.run()
        sleepProcess.waitUntilExit()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        while true {
            autoreleasepool(invoking: test)
        }

    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

}

Может кто-нибудь, пожалуйста, указать мне правильное направление? Спасибо!

Подключено: Swift macOS Process.run () утечка порта

...