【问题标题】:Process isn't terminating macOS Application / Killing Running Process进程没有终止 macOS 应用程序/终止正在运行的进程
【发布时间】:2024-07-27 05:15:02
【问题描述】:

我正在使用 getRunningPrcoess() 函数获取所有正在运行的进程。但是当我试图终止某个特定进程时,终止功能不起作用,它不会终止该进程。请告诉我我的代码有什么问题。我正在使用 killProcess(_ processId: Int) 函数并在参数中传递进程 ID 来终止进程。有没有其他方法可以从您的应用程序中终止正在运行的进程?

//MARK:- Variables
var arrApplication: [NSRunningApplication]!

//MARK:- Load
override func viewDidLoad() {
    super.viewDidLoad()
    // Do view setup here.
    tblRunningProcess.delegate = self
    tblRunningProcess.dataSource = self
    getRunningPrcoess()
}

//MARK:- Actions
@IBAction func btnEndTaskAction(_ sender: NSButton) {
    arrApplication[sender.tag].forceTerminate()
    getRunningPrcoess()
}

//MARK:- Functions
func getRunningPrcoess() {
    // Get all running applications
    let workspace = NSWorkspace.shared
    arrApplication = workspace.runningApplications
    tblRunningProcess.reloadData()
}

func numberOfRows(in tableView: NSTableView) -> Int {
    return arrApplication == nil ? 0 : arrApplication.count
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
    guard let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "RunningProcessTCell"), owner: self) as? RunningProcessTCell else { return nil }
    cell.lblProcessName.stringValue = "Name: \(arrApplication[row].localizedName ?? "N/A")"
    cell.lblProcessId.stringValue = "ID: \(arrApplication[row].bundleIdentifier ?? "N/A")"
    cell.imgIcon.image = arrApplication[row].icon
    cell.btnEndTask.tag = row
    return cell
}

【问题讨论】:

    标签: swift macos process kill terminate


    【解决方案1】:

    我认为您正在初始化一个新进程,而不是终止现有进程。 .init() 创建一个具有相同标识符的新进程,然后将其杀死。所以你需要在这里改变你的方法。

    更新: 正确的解决方案是在项目设置的功能部分中关闭沙盒模式。

    【讨论】:

    • 我也直接终止了进程,但它不起作用:( .like this arrApplication[sender.tag].forceTerminate()
    • 是的,不知何故参考是错误的。看看这个*.com/a/1481299/5769211
    • 我检查了标识符的引用是否正确。每当我杀死自己的应用程序时,它都可以工作,但不适用于其他正在运行的进程。
    • 我也更新了我的问题。你可以再过一遍。
    • 是的,只是一个疯狂的猜测,那么也许操作系统不允许你,因为你处于沙盒模式。尝试在项目设置的功能部分中关闭沙盒模式。
    最近更新 更多