tauri-apps/tauri · warning
unable to kill native webdriver server
Error message
unable to kill native webdriver server
What it means
Shutdown-time panic in tauri-driver: on SIGTERM/SIGINT/SIGQUIT the signal task calls _driver.kill().expect("unable to kill native webdriver server") on the native WebDriver child process. kill() fails when the child has already exited (it crashed or was killed elsewhere, or a second signal raced the first), so the handler panics instead of exiting cleanly.
Source
Thrown at crates/tauri-driver/src/server.rs:186
#[tokio::main(flavor = "current_thread")]
pub async fn run(args: Args, mut _driver: Child) -> Result<(), Error> {
#[cfg(unix)]
let (signals_handle, signals_task) = {
use futures_util::StreamExt;
use signal_hook::consts::signal::*;
let signals = signal_hook_tokio::Signals::new([SIGTERM, SIGINT, SIGQUIT])?;
let signals_handle = signals.handle();
let signals_task = tokio::spawn(async move {
let mut signals = signals.fuse();
#[allow(clippy::never_loop)]
while let Some(signal) = signals.next().await {
match signal {
SIGTERM | SIGINT | SIGQUIT => {
_driver
.kill()
.expect("unable to kill native webdriver server");
std::process::exit(0);
}
_ => unreachable!(),
}
}
});
(signals_handle, signals_task)
};
let address = std::net::SocketAddr::from(([127, 0, 0, 1], args.port));
// the client we use to proxy requests to the native webdriver
let client = Client::builder(TokioExecutor::new())
.http1_preserve_header_case(true)
.http1_title_case_headers(true)
.retry_canceled_requests(false)
.build_http();
View on GitHub (pinned to 52e4b6e71d)
Solutions
- Upgrade tauri-driver — killing an already-exited child should be tolerated; check release notes for the fix
- Keep the native driver healthy during the run: watch its stderr and fix the underlying crash (often missing WebKitGTK libs)
- Send one termination signal and allow a grace period before escalating
- In CI wrappers, treat a non-zero tauri-driver exit during shutdown as non-fatal when the tests themselves already passed
Defensive patterns
Strategy: fallback
Prevention
- Send a single termination signal and wait for shutdown before escalating
- Watch the native driver's stderr during runs so you fix crashes before shutdown races them
- In CI wrappers, ignore tauri-driver's exit status when tests already passed
- Track tauri-driver updates that tolerate killing an already-exited child
When it happens
Trigger: Sending Ctrl+C/SIGTERM when the native WebDriver already died — e.g. it crashed during the test run — or a second termination signal arriving while the first shutdown is still in progress.
Common situations: Test session ends after WebKitWebDriver/msedgedriver crashed mid-run; CI sending SIGTERM then quickly SIGKILL; supervisors double-signaling tauri-driver.
Related errors
AI-assisted analysis of tauri-apps/tauri@52e4b6e71d (2026-08-20).
Data as JSON: /api/errors/e45cd482e7ba4446.
Report an issue: GitHub.