Search code examples
swiftprocessmacos-sierralaunch

Kill process in swift


I am trying to make a Mac application that will automatically close a code designated application running on the OS. I am trying to use killall (like in Terminal). Whenever I try to run the program, I get, "sysctl: unknown oid 'killall'".

Here's my code:

let task = Process()
    task.launchPath = "/usr/sbin/sysctl"
    ///usr/sbin/sysctl
    task.arguments = ["killall","iTunes"]
    let pipe = Pipe()
    task.standardOutput = pipe
    task.standardError = pipe
    task.launch()
    task.waitUntilExit()
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String
    print(output)

Thanks in advance!


Solution

  • I'd suggest you first read the man page for sysctl -- it's used to get and set kernel state. Does that sound like something you want?

    The path to killall is /usr/bin/killall, which you can find from Terminal:

    > which killall
    /usr/bin/killall
    

    Here's the full Swift code:

    let pipe = Pipe()
    
    let task = Process()
    task.launchPath = "/usr/bin/killall"
    task.arguments = ["iTunes"]
    task.standardOutput = pipe
    task.standardError = pipe
    task.launch()
    task.waitUntilExit()
    
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    if let output = String(data: data, encoding: .utf8) {
        print(output)
    }