🏡 index : quine-global/webdriverio.git

import logger from '@wdio/logger'

const log = logger('webdriver')

/**
 * Kill the driver process after `deleteSession` command is done
 * @param capabilities - the capabilities of the driver
 * @param shutdownDriver - whether to shutdown the driver
 */
export function killDriverProcess(capabilities: WebdriverIO.Capabilities, shutdownDriver: boolean) {
    if (shutdownDriver && 'wdio:driverPID' in capabilities && capabilities['wdio:driverPID']) {
        log.info(`Kill driver process with PID ${capabilities['wdio:driverPID']}`)
        try {
            const killedSuccessfully = process.kill(capabilities['wdio:driverPID'], 'SIGKILL')
            if (!killedSuccessfully) {
                log.warn('Failed to kill driver process, manually clean-up might be required')
            }
        } catch (err) {
            log.warn('Failed to kill driver process', err)
        }

        setTimeout(() => {
            /**
             * clear up potential leaked TLS Socket handles
             * see https://github.com/puppeteer/puppeteer/pull/10667
             */
            for (const handle of process._getActiveHandles()) {
                if (handle.servername && handle.servername.includes('edgedl.me')) {
                    handle.destroy()
                }
            }
        }, 10)
    }
}