mirror of
https://git.sanhost.net/sanasol/hytale-f2p
synced 2026-02-26 09:11:49 -03:00
docs: add analysis on ghost process and launcher cleanup
This commit is contained in:
83
docs/GHOST_PROCESS_FIX_SUMMARY.md
Normal file
83
docs/GHOST_PROCESS_FIX_SUMMARY.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# Quick Fix Summary: Ghost Process Issue
|
||||
|
||||
## Problem
|
||||
Task Manager freezed after launcher runs due to accumulating ghost PowerShell processes.
|
||||
|
||||
## Root Cause
|
||||
**File:** `backend/utils/platformUtils.js`
|
||||
|
||||
Two functions used `execSync()` to run PowerShell commands:
|
||||
- `detectGpuWindows()` (GPU detection at startup & game launch)
|
||||
- `getSystemTypeWindows()` (system type detection)
|
||||
|
||||
`execSync()` on Windows spawns PowerShell processes that don't properly terminate → accumulate over time → freeze Task Manager.
|
||||
|
||||
## Solution Applied
|
||||
|
||||
### Changed From (❌ Wrong):
|
||||
```javascript
|
||||
output = execSync(
|
||||
'powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-CimInstance..."',
|
||||
{ encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }
|
||||
);
|
||||
```
|
||||
|
||||
### Changed To (✅ Correct):
|
||||
```javascript
|
||||
const result = spawnSync('powershell.exe', [
|
||||
'-NoProfile',
|
||||
'-ExecutionPolicy', 'Bypass',
|
||||
'-Command',
|
||||
'Get-CimInstance...'
|
||||
], {
|
||||
encoding: 'utf8',
|
||||
timeout: 5000, // 5 second timeout - processes killed if hung
|
||||
stdio: ['ignore', 'pipe', 'ignore'],
|
||||
windowsHide: true
|
||||
});
|
||||
```
|
||||
|
||||
## What Changed
|
||||
|
||||
| Aspect | Before | After |
|
||||
|--------|--------|-------|
|
||||
| **Method** | `execSync()` → shell string | `spawnSync()` → argument array |
|
||||
| **Process spawn** | Via cmd.exe → powershell.exe | Direct powershell.exe |
|
||||
| **Timeout** | None (can hang indefinitely) | 5 seconds (processes auto-killed) |
|
||||
| **Process cleanup** | Hit or miss | Guaranteed |
|
||||
| **Ghost processes** | ❌ Accumulate over time | ✅ Always terminate |
|
||||
| **Performance** | Slower (shell parsing) | Faster (direct spawn) |
|
||||
|
||||
## Why This Works
|
||||
|
||||
1. **spawnSync directly spawns PowerShell** without intermediate cmd.exe
|
||||
2. **timeout: 5000** forcibly kills any hung process after 5 seconds
|
||||
3. **windowsHide: true** prevents window flashing and improves cleanup
|
||||
4. **Node.js has better control** over process lifecycle with spawnSync
|
||||
|
||||
## Impact
|
||||
|
||||
- ✅ No more ghost PowerShell processes
|
||||
- ✅ Task Manager stays responsive
|
||||
- ✅ Launcher performance improved
|
||||
- ✅ Game launch unaffected (still works the same)
|
||||
- ✅ All fallback methods preserved (Get-WmiObject, wmic)
|
||||
|
||||
## Files Changed
|
||||
|
||||
Only one file modified: **`backend/utils/platformUtils.js`**
|
||||
- Import added for `spawnSync`
|
||||
- Two functions refactored with new approach
|
||||
- All error handling preserved
|
||||
|
||||
## Testing
|
||||
|
||||
After applying fix, verify no ghost processes appear in Task Manager:
|
||||
|
||||
```
|
||||
Before launch: PowerShell processes = 0 or 1
|
||||
During launch: PowerShell processes = 0 or 1
|
||||
After game closes: PowerShell processes = 0 or 1
|
||||
```
|
||||
|
||||
If processes keep accumulating, check Task Manager → Details tab → look for powershell.exe entries.
|
||||
Reference in New Issue
Block a user