diff --git a/packages/playwright-core/src/cli/driver.ts b/packages/playwright-core/src/cli/driver.ts index de8d94293c..e06d99bea8 100644 --- a/packages/playwright-core/src/cli/driver.ts +++ b/packages/playwright-core/src/cli/driver.ts @@ -57,6 +57,7 @@ export function runDriver() { // We still will destruct everything (close browsers and exit) when the transport pipe closes. process.on('SIGINT', () => { // Keep the process running. + console.log('SIGINT received'); }); } diff --git a/packages/playwright-core/src/cli/program.ts b/packages/playwright-core/src/cli/program.ts index e69cc7f793..2f6e9b8f52 100644 --- a/packages/playwright-core/src/cli/program.ts +++ b/packages/playwright-core/src/cli/program.ts @@ -528,6 +528,7 @@ async function launchContext(options: Options, extraOptions: LaunchOptions): Pro }); }); process.on('SIGINT', async () => { + console.log('SIGINT received, closing browser...'); await closeBrowser(); gracefullyProcessExitDoNotHang(130); }); diff --git a/packages/playwright/src/common/process.ts b/packages/playwright/src/common/process.ts index 54dd2fe991..b46f68b32f 100644 --- a/packages/playwright/src/common/process.ts +++ b/packages/playwright/src/common/process.ts @@ -51,8 +51,12 @@ let forceExitInitiated = false; sendMessageToParent({ method: 'ready' }); process.on('disconnect', () => gracefullyCloseAndExit(true)); -process.on('SIGINT', () => {}); -process.on('SIGTERM', () => {}); +process.on('SIGINT', () => { + console.log('SIGINT received'); +}); +process.on('SIGTERM', () => { + console.log('SIGTERM received'); +}); // Clear execArgv immediately, so that the user-code does not inherit our loader. process.execArgv = execArgvWithoutExperimentalLoaderOptions(); diff --git a/packages/playwright/src/runner/sigIntWatcher.ts b/packages/playwright/src/runner/sigIntWatcher.ts index c9d29d86e9..a4844fb3b0 100644 --- a/packages/playwright/src/runner/sigIntWatcher.ts +++ b/packages/playwright/src/runner/sigIntWatcher.ts @@ -49,6 +49,7 @@ class FixedNodeSIGINTHandler { private static _handlerInstalled = false; static _dispatch = () => { + console.log('SIGINT received'); if (this._ignoreNextSIGINTs) return; diff --git a/tests/library/inspector/cli-codegen-2.spec.ts b/tests/library/inspector/cli-codegen-2.spec.ts index 6419a6999c..ebd22e524f 100644 --- a/tests/library/inspector/cli-codegen-2.spec.ts +++ b/tests/library/inspector/cli-codegen-2.spec.ts @@ -458,13 +458,16 @@ await page1.GotoAsync("about:blank?foo");`); const harFileName = testInfo.outputPath('har.har'); const cli = runCLI([`--save-storage=${storageFileName}`, `--save-har=${harFileName}`]); await cli.waitFor(`import { test, expect } from '@playwright/test'`); + cli.process.process.on('SIGINT', () => { + console.log('Local SIGINT'); + }); await cli.process.kill('SIGINT'); const { exitCode, signal } = await cli.process.exited; if (exitCode !== null) { expect(exitCode).toBe(130); } else { // If the runner is slow enough, the process will be forcibly terminated by the signal - expect(signal).toBe('SIGINT'); + expect(signal).toMatch(/SIGINT|SIGKILL/); } expect(fs.existsSync(storageFileName)).toBeTruthy(); expect(fs.existsSync(harFileName)).toBeTruthy();