Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tauri 无法处理由 Command + Q 导致的 App 退出事件,导致一些子进程无法被 kill #21

Closed
web3nomad opened this issue Mar 16, 2024 · 5 comments
Assignees
Labels
bug Something isn't working help wanted Extra attention is needed

Comments

@web3nomad
Copy link
Member

先 close 了,现在应该只有 qdrant 是常驻的进程,目前只处理了这个。

还没有考虑特殊异常导致 tauri::WindowEvent::Destroyed 事件没有被触发,现在没有这方面的实践经验,遇到了再说,留意下,网上查了下 tauri 并没有什么好的办法来管理自己的子进程,只能自己小心处理。

还有就是如果监听 QdrantServerPayload::Kill 的那个线程挂了,一样可能会导致 qdrant 无法被 kill https://github.com/bmrlab/tauri-dam-test-playground/blob/main/crates/vector-db/src/qdrant.rs#L152

可以考虑记录 pid。

刚遇到了前面提到的“特殊异常”,mac 上的 force quit,或者 command + q 退出 app 并不会和点击左上角 x 按钮一样触发 Destroyed 事件,结果是 qdrant 还在运行。

这个问题我单独新建个 issue,寻求帮助 ...

@web3nomad web3nomad added bug Something isn't working help wanted Extra attention is needed labels Mar 16, 2024
@web3nomad web3nomad added this to the Public Beta milestone Mar 16, 2024
@web3nomad web3nomad changed the title Tauri 无法监听 Command + Q 退出 App,导致一些子进程无法被 kill Tauri 无法监听由 Command + Q 导致的 App 退出事件,导致一些子进程无法被 kill Mar 16, 2024
@web3nomad web3nomad changed the title Tauri 无法监听由 Command + Q 导致的 App 退出事件,导致一些子进程无法被 kill Tauri 无法处理由 Command + Q 导致的 App 退出事件,导致一些子进程无法被 kill Mar 16, 2024
@ZingerLittleBee
Copy link
Contributor

可以在前端添加如下代码,preventDefault() 阻止事件传递,自行处理程序退出逻辑

document.addEventListener('keydown', event => {
	if (event.metaKey && event.key === 'q') {
		event.preventDefault()
		console.log('Cmd + Q is pressed.')
		// 例如,可以调用 Tauri API 关闭窗口
		/**
                {
                  "allowlist": {
                    "process": {
                      "all": false,
                      "exit": true
                    }
                  }
                */
		// import { exit } from '@tauri-apps/api/process'
		// exit(0)
	}
	if (event.metaKey && event.key === 'w') {
		event.preventDefault()
		console.log('Cmd + Q is pressed.')
		// 例如,可以调用 Tauri API 关闭窗口
		// exit(0)
	}
})

@web3nomad
Copy link
Member Author

可以在前端添加如下代码,preventDefault() 阻止事件传递,自行处理程序退出逻辑

document.addEventListener('keydown', event => {
	if (event.metaKey && event.key === 'q') {
		event.preventDefault()
		console.log('Cmd + Q is pressed.')
		// 例如,可以调用 Tauri API 关闭窗口
		/**
                {
                  "allowlist": {
                    "process": {
                      "all": false,
                      "exit": true
                    }
                  }
                */
		// import { exit } from '@tauri-apps/api/process'
		// exit(0)
	}
	if (event.metaKey && event.key === 'w') {
		event.preventDefault()
		console.log('Cmd + Q is pressed.')
		// 例如,可以调用 Tauri API 关闭窗口
		// exit(0)
	}
})

牛逼,这个做法可以 。。。

web3nomad added a commit that referenced this issue Mar 17, 2024
@web3nomad web3nomad self-assigned this Mar 17, 2024
@web3nomad
Copy link
Member Author

cmd + q 的这种关闭,也可以被 mac 的 quit 菜单触发,这时候捕捉不到。

监听关闭事件的方式可能不大完备。

@ZingerLittleBee
Copy link
Contributor

cmd + q 的这种关闭,也可以被 mac 的 quit 菜单触发,这时候捕捉不到。

监听关闭事件的方式可能不大完备。

tauri 暂不支持右键 dock 的 api issue

实在不行可以隐藏 dock 图标

// don't show on the taskbar/springboard
#[cfg(target_os = "macos")]
app.set_activation_policy(tauri::ActivationPolicy::Accessory);

@web3nomad
Copy link
Member Author

不处理这个问题了,其实 app 退出没有停掉 qdrant 没关系,只要重新启动可以继续正常工作就行。

程序主动记录下 qdrant 的 pid,并且支持动态端口

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants