mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-01-17 22:10:29 +00:00
Add support to disable multi-process and named pipe via env
Introduces NAPCAT_DISABLE_MULTI_PROCESS and NAPCAT_DISABLE_PIPE environment variables to allow disabling multi-process mode and named pipe connection, respectively. Also simplifies process termination logic by always using SIGKILL.
This commit is contained in:
parent
3e8b575015
commit
1c7ac42a46
@ -24,9 +24,12 @@ declare global {
|
|||||||
// 判断是否为子进程(通过环境变量)
|
// 判断是否为子进程(通过环境变量)
|
||||||
const isWorkerProcess = process.env['NAPCAT_WORKER_PROCESS'] === '1';
|
const isWorkerProcess = process.env['NAPCAT_WORKER_PROCESS'] === '1';
|
||||||
|
|
||||||
|
// 判断是否禁用多进程模式
|
||||||
|
const isMultiProcessDisabled = process.env['NAPCAT_DISABLE_MULTI_PROCESS'] === '1';
|
||||||
|
|
||||||
// 只在主进程中导入 utilityProcess
|
// 只在主进程中导入 utilityProcess
|
||||||
let utilityProcess: any;
|
let utilityProcess: any;
|
||||||
if (!isWorkerProcess) {
|
if (!isWorkerProcess && !isMultiProcessDisabled) {
|
||||||
// @ts-ignore - electron 运行时存在但类型声明可能缺失
|
// @ts-ignore - electron 运行时存在但类型声明可能缺失
|
||||||
const electron = await import('electron');
|
const electron = await import('electron');
|
||||||
utilityProcess = electron.utilityProcess;
|
utilityProcess = electron.utilityProcess;
|
||||||
@ -73,13 +76,8 @@ export async function restartWorker () {
|
|||||||
// 如果没有抛出异常,说明进程还在运行
|
// 如果没有抛出异常,说明进程还在运行
|
||||||
logger.logWarn(`[NapCat] [UtilityProcess] 进程 ${workerPid} 仍在运行,强制杀掉`);
|
logger.logWarn(`[NapCat] [UtilityProcess] 进程 ${workerPid} 仍在运行,强制杀掉`);
|
||||||
try {
|
try {
|
||||||
// Windows 使用 taskkill,Unix 使用 SIGKILL
|
// 使用 SIGKILL 强制终止进程
|
||||||
if (process.platform === 'win32') {
|
process.kill(workerPid, 'SIGKILL');
|
||||||
const { execSync } = await import('child_process');
|
|
||||||
execSync(`taskkill /F /PID ${workerPid} /T`, { stdio: 'ignore' });
|
|
||||||
} else {
|
|
||||||
process.kill(workerPid, 'SIGKILL');
|
|
||||||
}
|
|
||||||
logger.log(`[NapCat] [UtilityProcess] 已强制终止进程 ${workerPid}`);
|
logger.log(`[NapCat] [UtilityProcess] 已强制终止进程 ${workerPid}`);
|
||||||
} catch (killError) {
|
} catch (killError) {
|
||||||
logger.logError(`[NapCat] [UtilityProcess] 强制终止进程失败:`, killError);
|
logger.logError(`[NapCat] [UtilityProcess] 强制终止进程失败:`, killError);
|
||||||
@ -167,8 +165,12 @@ async function startWorker () {
|
|||||||
async function startMasterProcess () {
|
async function startMasterProcess () {
|
||||||
logger.log('[NapCat] [UtilityProcess] Master进程启动,PID:', process.pid);
|
logger.log('[NapCat] [UtilityProcess] Master进程启动,PID:', process.pid);
|
||||||
|
|
||||||
// 连接命名管道,用于输出子进程内容
|
// 连接命名管道,用于输出子进程内容(可通过环境变量禁用)
|
||||||
await connectToNamedPipe(logger).catch(e => logger.logError('命名管道连接失败', e));
|
if (process.env['NAPCAT_DISABLE_PIPE'] !== '1') {
|
||||||
|
await connectToNamedPipe(logger).catch(e => logger.logError('命名管道连接失败', e));
|
||||||
|
} else {
|
||||||
|
logger.log('[NapCat] [UtilityProcess] 命名管道已禁用 (NAPCAT_DISABLE_PIPE=1)');
|
||||||
|
}
|
||||||
|
|
||||||
// 启动 worker 进程
|
// 启动 worker 进程
|
||||||
await startWorker();
|
await startWorker();
|
||||||
@ -225,7 +227,14 @@ async function startWorkerProcess () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 主入口
|
// 主入口
|
||||||
if (isWorkerProcess) {
|
if (isMultiProcessDisabled) {
|
||||||
|
// 禁用多进程模式,直接启动 NCoreInitShell
|
||||||
|
logger.log('[NapCat] [SingleProcess] 多进程模式已禁用,直接启动核心');
|
||||||
|
NCoreInitShell().catch((e: Error) => {
|
||||||
|
logger.logError('[NapCat] [SingleProcess] 启动失败:', e);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
} else if (isWorkerProcess) {
|
||||||
// Worker进程
|
// Worker进程
|
||||||
startWorkerProcess().catch((e: Error) => {
|
startWorkerProcess().catch((e: Error) => {
|
||||||
logger.logError('[NapCat] [UtilityProcess] Worker进程启动失败:', e);
|
logger.logError('[NapCat] [UtilityProcess] Worker进程启动失败:', e);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user