@masuidrive/procman 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/src/cli/commands/clear-log.d.ts +10 -0
  4. package/dist/src/cli/commands/clear-log.d.ts.map +1 -0
  5. package/dist/src/cli/commands/clear-log.js +77 -0
  6. package/dist/src/cli/commands/clear-log.js.map +1 -0
  7. package/dist/src/cli/commands/exit.d.ts +10 -0
  8. package/dist/src/cli/commands/exit.d.ts.map +1 -0
  9. package/dist/src/cli/commands/exit.js +65 -0
  10. package/dist/src/cli/commands/exit.js.map +1 -0
  11. package/dist/src/cli/commands/help.d.ts +10 -0
  12. package/dist/src/cli/commands/help.d.ts.map +1 -0
  13. package/dist/src/cli/commands/help.js +340 -0
  14. package/dist/src/cli/commands/help.js.map +1 -0
  15. package/dist/src/cli/commands/list.d.ts +11 -0
  16. package/dist/src/cli/commands/list.d.ts.map +1 -0
  17. package/dist/src/cli/commands/list.js +130 -0
  18. package/dist/src/cli/commands/list.js.map +1 -0
  19. package/dist/src/cli/commands/load.d.ts +11 -0
  20. package/dist/src/cli/commands/load.d.ts.map +1 -0
  21. package/dist/src/cli/commands/load.js +250 -0
  22. package/dist/src/cli/commands/load.js.map +1 -0
  23. package/dist/src/cli/commands/log.d.ts +18 -0
  24. package/dist/src/cli/commands/log.d.ts.map +1 -0
  25. package/dist/src/cli/commands/log.js +282 -0
  26. package/dist/src/cli/commands/log.js.map +1 -0
  27. package/dist/src/cli/commands/restart.d.ts +11 -0
  28. package/dist/src/cli/commands/restart.d.ts.map +1 -0
  29. package/dist/src/cli/commands/restart.js +99 -0
  30. package/dist/src/cli/commands/restart.js.map +1 -0
  31. package/dist/src/cli/commands/start.d.ts +11 -0
  32. package/dist/src/cli/commands/start.d.ts.map +1 -0
  33. package/dist/src/cli/commands/start.js +105 -0
  34. package/dist/src/cli/commands/start.js.map +1 -0
  35. package/dist/src/cli/commands/stop.d.ts +12 -0
  36. package/dist/src/cli/commands/stop.d.ts.map +1 -0
  37. package/dist/src/cli/commands/stop.js +105 -0
  38. package/dist/src/cli/commands/stop.js.map +1 -0
  39. package/dist/src/cli/index.d.ts +3 -0
  40. package/dist/src/cli/index.d.ts.map +1 -0
  41. package/dist/src/cli/index.js +28 -0
  42. package/dist/src/cli/index.js.map +1 -0
  43. package/dist/src/cli/parser.d.ts +14 -0
  44. package/dist/src/cli/parser.d.ts.map +1 -0
  45. package/dist/src/cli/parser.js +131 -0
  46. package/dist/src/cli/parser.js.map +1 -0
  47. package/dist/src/cli/signal-handler.d.ts +51 -0
  48. package/dist/src/cli/signal-handler.d.ts.map +1 -0
  49. package/dist/src/cli/signal-handler.js +129 -0
  50. package/dist/src/cli/signal-handler.js.map +1 -0
  51. package/dist/src/cli/utils/error-handler.d.ts +39 -0
  52. package/dist/src/cli/utils/error-handler.d.ts.map +1 -0
  53. package/dist/src/cli/utils/error-handler.js +200 -0
  54. package/dist/src/cli/utils/error-handler.js.map +1 -0
  55. package/dist/src/cli/utils/error-utils.d.ts +16 -0
  56. package/dist/src/cli/utils/error-utils.d.ts.map +1 -0
  57. package/dist/src/cli/utils/error-utils.js +48 -0
  58. package/dist/src/cli/utils/error-utils.js.map +1 -0
  59. package/dist/src/cli/utils/ipc-client.d.ts +80 -0
  60. package/dist/src/cli/utils/ipc-client.d.ts.map +1 -0
  61. package/dist/src/cli/utils/ipc-client.js +275 -0
  62. package/dist/src/cli/utils/ipc-client.js.map +1 -0
  63. package/dist/src/config/config-loader.d.ts +74 -0
  64. package/dist/src/config/config-loader.d.ts.map +1 -0
  65. package/dist/src/config/config-loader.js +229 -0
  66. package/dist/src/config/config-loader.js.map +1 -0
  67. package/dist/src/config/config-normalizer.d.ts +135 -0
  68. package/dist/src/config/config-normalizer.d.ts.map +1 -0
  69. package/dist/src/config/config-normalizer.js +309 -0
  70. package/dist/src/config/config-normalizer.js.map +1 -0
  71. package/dist/src/config/config-reporter.d.ts +183 -0
  72. package/dist/src/config/config-reporter.d.ts.map +1 -0
  73. package/dist/src/config/config-reporter.js +311 -0
  74. package/dist/src/config/config-reporter.js.map +1 -0
  75. package/dist/src/config/config-validator.d.ts +163 -0
  76. package/dist/src/config/config-validator.d.ts.map +1 -0
  77. package/dist/src/config/config-validator.js +489 -0
  78. package/dist/src/config/config-validator.js.map +1 -0
  79. package/dist/src/config/config-watcher.d.ts +161 -0
  80. package/dist/src/config/config-watcher.d.ts.map +1 -0
  81. package/dist/src/config/config-watcher.js +245 -0
  82. package/dist/src/config/config-watcher.js.map +1 -0
  83. package/dist/src/config/index.d.ts +36 -0
  84. package/dist/src/config/index.d.ts.map +1 -0
  85. package/dist/src/config/index.js +41 -0
  86. package/dist/src/config/index.js.map +1 -0
  87. package/dist/src/config/secure-config-loader.d.ts +77 -0
  88. package/dist/src/config/secure-config-loader.d.ts.map +1 -0
  89. package/dist/src/config/secure-config-loader.js +326 -0
  90. package/dist/src/config/secure-config-loader.js.map +1 -0
  91. package/dist/src/daemon/base-socket-connection.d.ts +66 -0
  92. package/dist/src/daemon/base-socket-connection.d.ts.map +1 -0
  93. package/dist/src/daemon/base-socket-connection.js +192 -0
  94. package/dist/src/daemon/base-socket-connection.js.map +1 -0
  95. package/dist/src/daemon/component-manager.d.ts +180 -0
  96. package/dist/src/daemon/component-manager.d.ts.map +1 -0
  97. package/dist/src/daemon/component-manager.js +794 -0
  98. package/dist/src/daemon/component-manager.js.map +1 -0
  99. package/dist/src/daemon/crash-recovery.d.ts +71 -0
  100. package/dist/src/daemon/crash-recovery.d.ts.map +1 -0
  101. package/dist/src/daemon/crash-recovery.js +282 -0
  102. package/dist/src/daemon/crash-recovery.js.map +1 -0
  103. package/dist/src/daemon/daemon-main.d.ts +18 -0
  104. package/dist/src/daemon/daemon-main.d.ts.map +1 -0
  105. package/dist/src/daemon/daemon-main.js +160 -0
  106. package/dist/src/daemon/daemon-main.js.map +1 -0
  107. package/dist/src/daemon/daemon-state-manager.d.ts +111 -0
  108. package/dist/src/daemon/daemon-state-manager.d.ts.map +1 -0
  109. package/dist/src/daemon/daemon-state-manager.js +194 -0
  110. package/dist/src/daemon/daemon-state-manager.js.map +1 -0
  111. package/dist/src/daemon/data-directory.d.ts +51 -0
  112. package/dist/src/daemon/data-directory.d.ts.map +1 -0
  113. package/dist/src/daemon/data-directory.js +136 -0
  114. package/dist/src/daemon/data-directory.js.map +1 -0
  115. package/dist/src/daemon/index.d.ts +20 -0
  116. package/dist/src/daemon/index.d.ts.map +1 -0
  117. package/dist/src/daemon/index.js +24 -0
  118. package/dist/src/daemon/index.js.map +1 -0
  119. package/dist/src/daemon/ipc-client-base.d.ts +153 -0
  120. package/dist/src/daemon/ipc-client-base.d.ts.map +1 -0
  121. package/dist/src/daemon/ipc-client-base.js +476 -0
  122. package/dist/src/daemon/ipc-client-base.js.map +1 -0
  123. package/dist/src/daemon/ipc-command-handler.d.ts +107 -0
  124. package/dist/src/daemon/ipc-command-handler.d.ts.map +1 -0
  125. package/dist/src/daemon/ipc-command-handler.js +483 -0
  126. package/dist/src/daemon/ipc-command-handler.js.map +1 -0
  127. package/dist/src/daemon/ipc-factory.d.ts +92 -0
  128. package/dist/src/daemon/ipc-factory.d.ts.map +1 -0
  129. package/dist/src/daemon/ipc-factory.js +210 -0
  130. package/dist/src/daemon/ipc-factory.js.map +1 -0
  131. package/dist/src/daemon/ipc-server-base.d.ts +158 -0
  132. package/dist/src/daemon/ipc-server-base.d.ts.map +1 -0
  133. package/dist/src/daemon/ipc-server-base.js +491 -0
  134. package/dist/src/daemon/ipc-server-base.js.map +1 -0
  135. package/dist/src/daemon/message-protocol.d.ts +132 -0
  136. package/dist/src/daemon/message-protocol.d.ts.map +1 -0
  137. package/dist/src/daemon/message-protocol.js +252 -0
  138. package/dist/src/daemon/message-protocol.js.map +1 -0
  139. package/dist/src/daemon/named-pipe-client.d.ts +61 -0
  140. package/dist/src/daemon/named-pipe-client.d.ts.map +1 -0
  141. package/dist/src/daemon/named-pipe-client.js +221 -0
  142. package/dist/src/daemon/named-pipe-client.js.map +1 -0
  143. package/dist/src/daemon/named-pipe-server.d.ts +40 -0
  144. package/dist/src/daemon/named-pipe-server.d.ts.map +1 -0
  145. package/dist/src/daemon/named-pipe-server.js +102 -0
  146. package/dist/src/daemon/named-pipe-server.js.map +1 -0
  147. package/dist/src/daemon/orphan-detector.d.ts +66 -0
  148. package/dist/src/daemon/orphan-detector.d.ts.map +1 -0
  149. package/dist/src/daemon/orphan-detector.js +208 -0
  150. package/dist/src/daemon/orphan-detector.js.map +1 -0
  151. package/dist/src/daemon/pid-manager.d.ts +49 -0
  152. package/dist/src/daemon/pid-manager.d.ts.map +1 -0
  153. package/dist/src/daemon/pid-manager.js +110 -0
  154. package/dist/src/daemon/pid-manager.js.map +1 -0
  155. package/dist/src/daemon/procman-daemon.d.ts +188 -0
  156. package/dist/src/daemon/procman-daemon.d.ts.map +1 -0
  157. package/dist/src/daemon/procman-daemon.js +802 -0
  158. package/dist/src/daemon/procman-daemon.js.map +1 -0
  159. package/dist/src/daemon/reconnection-system.d.ts +113 -0
  160. package/dist/src/daemon/reconnection-system.d.ts.map +1 -0
  161. package/dist/src/daemon/reconnection-system.js +223 -0
  162. package/dist/src/daemon/reconnection-system.js.map +1 -0
  163. package/dist/src/daemon/resource-manager.d.ts +204 -0
  164. package/dist/src/daemon/resource-manager.d.ts.map +1 -0
  165. package/dist/src/daemon/resource-manager.js +423 -0
  166. package/dist/src/daemon/resource-manager.js.map +1 -0
  167. package/dist/src/daemon/signal-handler.d.ts +58 -0
  168. package/dist/src/daemon/signal-handler.d.ts.map +1 -0
  169. package/dist/src/daemon/signal-handler.js +142 -0
  170. package/dist/src/daemon/signal-handler.js.map +1 -0
  171. package/dist/src/daemon/simple-resource-manager.d.ts +95 -0
  172. package/dist/src/daemon/simple-resource-manager.d.ts.map +1 -0
  173. package/dist/src/daemon/simple-resource-manager.js +180 -0
  174. package/dist/src/daemon/simple-resource-manager.js.map +1 -0
  175. package/dist/src/daemon/unix-socket-client.d.ts +69 -0
  176. package/dist/src/daemon/unix-socket-client.d.ts.map +1 -0
  177. package/dist/src/daemon/unix-socket-client.js +313 -0
  178. package/dist/src/daemon/unix-socket-client.js.map +1 -0
  179. package/dist/src/daemon/unix-socket-server.d.ts +61 -0
  180. package/dist/src/daemon/unix-socket-server.d.ts.map +1 -0
  181. package/dist/src/daemon/unix-socket-server.js +262 -0
  182. package/dist/src/daemon/unix-socket-server.js.map +1 -0
  183. package/dist/src/daemon/zombie-reaper.d.ts +83 -0
  184. package/dist/src/daemon/zombie-reaper.d.ts.map +1 -0
  185. package/dist/src/daemon/zombie-reaper.js +278 -0
  186. package/dist/src/daemon/zombie-reaper.js.map +1 -0
  187. package/dist/src/process-manager/index.d.ts +13 -0
  188. package/dist/src/process-manager/index.d.ts.map +1 -0
  189. package/dist/src/process-manager/index.js +11 -0
  190. package/dist/src/process-manager/index.js.map +1 -0
  191. package/dist/src/process-manager/interfaces/index.d.ts +31 -0
  192. package/dist/src/process-manager/interfaces/index.d.ts.map +1 -0
  193. package/dist/src/process-manager/interfaces/index.js +14 -0
  194. package/dist/src/process-manager/interfaces/index.js.map +1 -0
  195. package/dist/src/process-manager/interfaces/process-group.d.ts +200 -0
  196. package/dist/src/process-manager/interfaces/process-group.d.ts.map +1 -0
  197. package/dist/src/process-manager/interfaces/process-group.js +10 -0
  198. package/dist/src/process-manager/interfaces/process-group.js.map +1 -0
  199. package/dist/src/process-manager/interfaces/process-lifecycle.d.ts +97 -0
  200. package/dist/src/process-manager/interfaces/process-lifecycle.d.ts.map +1 -0
  201. package/dist/src/process-manager/interfaces/process-lifecycle.js +10 -0
  202. package/dist/src/process-manager/interfaces/process-lifecycle.js.map +1 -0
  203. package/dist/src/process-manager/interfaces/process-monitor.d.ts +118 -0
  204. package/dist/src/process-manager/interfaces/process-monitor.d.ts.map +1 -0
  205. package/dist/src/process-manager/interfaces/process-monitor.js +10 -0
  206. package/dist/src/process-manager/interfaces/process-monitor.js.map +1 -0
  207. package/dist/src/process-manager/interfaces/process-persistence.d.ts +125 -0
  208. package/dist/src/process-manager/interfaces/process-persistence.d.ts.map +1 -0
  209. package/dist/src/process-manager/interfaces/process-persistence.js +10 -0
  210. package/dist/src/process-manager/interfaces/process-persistence.js.map +1 -0
  211. package/dist/src/process-manager/managed-process-info.d.ts +307 -0
  212. package/dist/src/process-manager/managed-process-info.d.ts.map +1 -0
  213. package/dist/src/process-manager/managed-process-info.js +650 -0
  214. package/dist/src/process-manager/managed-process-info.js.map +1 -0
  215. package/dist/src/process-manager/process-group-manager.d.ts +103 -0
  216. package/dist/src/process-manager/process-group-manager.d.ts.map +1 -0
  217. package/dist/src/process-manager/process-group-manager.js +400 -0
  218. package/dist/src/process-manager/process-group-manager.js.map +1 -0
  219. package/dist/src/process-manager/process-lifecycle-manager.d.ts +68 -0
  220. package/dist/src/process-manager/process-lifecycle-manager.d.ts.map +1 -0
  221. package/dist/src/process-manager/process-lifecycle-manager.js +372 -0
  222. package/dist/src/process-manager/process-lifecycle-manager.js.map +1 -0
  223. package/dist/src/process-manager/process-manager.d.ts +296 -0
  224. package/dist/src/process-manager/process-manager.d.ts.map +1 -0
  225. package/dist/src/process-manager/process-manager.js +659 -0
  226. package/dist/src/process-manager/process-manager.js.map +1 -0
  227. package/dist/src/process-manager/process-monitor.d.ts +95 -0
  228. package/dist/src/process-manager/process-monitor.d.ts.map +1 -0
  229. package/dist/src/process-manager/process-monitor.js +357 -0
  230. package/dist/src/process-manager/process-monitor.js.map +1 -0
  231. package/dist/src/process-manager/process-persistence.d.ts +68 -0
  232. package/dist/src/process-manager/process-persistence.d.ts.map +1 -0
  233. package/dist/src/process-manager/process-persistence.js +364 -0
  234. package/dist/src/process-manager/process-persistence.js.map +1 -0
  235. package/dist/src/process-manager/utils/mutex.d.ts +82 -0
  236. package/dist/src/process-manager/utils/mutex.d.ts.map +1 -0
  237. package/dist/src/process-manager/utils/mutex.js +172 -0
  238. package/dist/src/process-manager/utils/mutex.js.map +1 -0
  239. package/dist/src/services/index.d.ts +8 -0
  240. package/dist/src/services/index.d.ts.map +1 -0
  241. package/dist/src/services/index.js +8 -0
  242. package/dist/src/services/index.js.map +1 -0
  243. package/dist/src/services/log-manager-config.d.ts +65 -0
  244. package/dist/src/services/log-manager-config.d.ts.map +1 -0
  245. package/dist/src/services/log-manager-config.js +145 -0
  246. package/dist/src/services/log-manager-config.js.map +1 -0
  247. package/dist/src/services/log-manager-factory.d.ts +134 -0
  248. package/dist/src/services/log-manager-factory.d.ts.map +1 -0
  249. package/dist/src/services/log-manager-factory.js +203 -0
  250. package/dist/src/services/log-manager-factory.js.map +1 -0
  251. package/dist/src/services/log-manager.d.ts +170 -0
  252. package/dist/src/services/log-manager.d.ts.map +1 -0
  253. package/dist/src/services/log-manager.js +1199 -0
  254. package/dist/src/services/log-manager.js.map +1 -0
  255. package/dist/src/services/log-path-validator.d.ts +121 -0
  256. package/dist/src/services/log-path-validator.d.ts.map +1 -0
  257. package/dist/src/services/log-path-validator.js +302 -0
  258. package/dist/src/services/log-path-validator.js.map +1 -0
  259. package/dist/src/services/process-log-integration.d.ts +62 -0
  260. package/dist/src/services/process-log-integration.d.ts.map +1 -0
  261. package/dist/src/services/process-log-integration.js +157 -0
  262. package/dist/src/services/process-log-integration.js.map +1 -0
  263. package/dist/src/shared/config.d.ts +67 -0
  264. package/dist/src/shared/config.d.ts.map +1 -0
  265. package/dist/src/shared/config.js +92 -0
  266. package/dist/src/shared/config.js.map +1 -0
  267. package/dist/src/shared/constants-streaming.d.ts +39 -0
  268. package/dist/src/shared/constants-streaming.d.ts.map +1 -0
  269. package/dist/src/shared/constants-streaming.js +39 -0
  270. package/dist/src/shared/constants-streaming.js.map +1 -0
  271. package/dist/src/shared/constants.d.ts +60 -0
  272. package/dist/src/shared/constants.d.ts.map +1 -0
  273. package/dist/src/shared/constants.js +71 -0
  274. package/dist/src/shared/constants.js.map +1 -0
  275. package/dist/src/shared/errors.d.ts +70 -0
  276. package/dist/src/shared/errors.d.ts.map +1 -0
  277. package/dist/src/shared/errors.js +101 -0
  278. package/dist/src/shared/errors.js.map +1 -0
  279. package/dist/src/shared/index.d.ts +14 -0
  280. package/dist/src/shared/index.d.ts.map +1 -0
  281. package/dist/src/shared/index.js +22 -0
  282. package/dist/src/shared/index.js.map +1 -0
  283. package/dist/src/shared/ipc.d.ts +402 -0
  284. package/dist/src/shared/ipc.d.ts.map +1 -0
  285. package/dist/src/shared/ipc.js +85 -0
  286. package/dist/src/shared/ipc.js.map +1 -0
  287. package/dist/src/shared/logger.d.ts +38 -0
  288. package/dist/src/shared/logger.d.ts.map +1 -0
  289. package/dist/src/shared/logger.js +139 -0
  290. package/dist/src/shared/logger.js.map +1 -0
  291. package/dist/src/shared/logs.d.ts +53 -0
  292. package/dist/src/shared/logs.d.ts.map +1 -0
  293. package/dist/src/shared/logs.js +26 -0
  294. package/dist/src/shared/logs.js.map +1 -0
  295. package/dist/src/shared/process.d.ts +102 -0
  296. package/dist/src/shared/process.d.ts.map +1 -0
  297. package/dist/src/shared/process.js +55 -0
  298. package/dist/src/shared/process.js.map +1 -0
  299. package/dist/src/shared/types.d.ts +15 -0
  300. package/dist/src/shared/types.d.ts.map +1 -0
  301. package/dist/src/shared/types.js +8 -0
  302. package/dist/src/shared/types.js.map +1 -0
  303. package/dist/src/types/index.d.ts +19 -0
  304. package/dist/src/types/index.d.ts.map +1 -0
  305. package/dist/src/types/index.js +5 -0
  306. package/dist/src/types/index.js.map +1 -0
  307. package/dist/src/utils/event-cleanup.d.ts +30 -0
  308. package/dist/src/utils/event-cleanup.d.ts.map +1 -0
  309. package/dist/src/utils/event-cleanup.js +32 -0
  310. package/dist/src/utils/event-cleanup.js.map +1 -0
  311. package/dist/src/utils/memory/memory-monitor.d.ts +126 -0
  312. package/dist/src/utils/memory/memory-monitor.d.ts.map +1 -0
  313. package/dist/src/utils/memory/memory-monitor.js +246 -0
  314. package/dist/src/utils/memory/memory-monitor.js.map +1 -0
  315. package/package.json +74 -0
@@ -0,0 +1,278 @@
1
+ /**
2
+ * ZombieReaper - Handles zombie process cleanup
3
+ *
4
+ * This class is responsible for:
5
+ * - Detecting zombie processes in the system
6
+ * - Reaping zombie child processes
7
+ * - Preventing zombie accumulation
8
+ *
9
+ * Following SOLID principles:
10
+ * - Single Responsibility: Only handles zombie process cleanup
11
+ * - Interface Segregation: Clean, focused interface
12
+ * - Dependency Inversion: Can be injected as a dependency
13
+ */
14
+ import { EventEmitter } from 'events';
15
+ import { exec } from 'child_process';
16
+ import { promisify } from 'util';
17
+ const execAsync = promisify(exec);
18
+ export class ZombieReaper extends EventEmitter {
19
+ reapInterval = null;
20
+ isReaping = false;
21
+ maxReapAttempts = 3;
22
+ sigchldHandler = null;
23
+ constructor() {
24
+ super();
25
+ // Don't automatically set up signal handlers in test environment
26
+ if (process.env.NODE_ENV !== 'test') {
27
+ this.setupSignalHandlers();
28
+ }
29
+ }
30
+ /**
31
+ * Set up SIGCHLD handler to automatically reap children
32
+ */
33
+ setupSignalHandlers() {
34
+ // Store handler reference for cleanup
35
+ this.sigchldHandler = () => {
36
+ this.handleSigchld();
37
+ };
38
+ // Handle SIGCHLD to reap zombie children
39
+ process.on('SIGCHLD', this.sigchldHandler);
40
+ }
41
+ /**
42
+ * Clean up signal handlers
43
+ */
44
+ cleanupSignalHandlers() {
45
+ if (this.sigchldHandler) {
46
+ process.removeListener('SIGCHLD', this.sigchldHandler);
47
+ this.sigchldHandler = null;
48
+ }
49
+ }
50
+ /**
51
+ * Handle SIGCHLD signal - called when a child process dies
52
+ */
53
+ handleSigchld() {
54
+ // In Node.js, we need to use waitpid through a native binding
55
+ // or rely on child_process events for proper reaping
56
+ // For now, trigger a reap cycle
57
+ this.reapZombies().catch((error) => {
58
+ console.error('[ZombieReaper] Error handling SIGCHLD:', error);
59
+ });
60
+ }
61
+ /**
62
+ * Start automatic zombie reaping
63
+ */
64
+ startReaping(intervalMs = 30000) {
65
+ if (this.isReaping) {
66
+ console.log('[ZombieReaper] Already reaping zombies');
67
+ return;
68
+ }
69
+ this.isReaping = true;
70
+ console.log(`[ZombieReaper] Starting zombie reaper (interval: ${intervalMs}ms)`);
71
+ // Initial reap
72
+ this.reapZombies().catch((error) => {
73
+ console.error('[ZombieReaper] Initial reap failed:', error);
74
+ });
75
+ // Set up periodic reaping
76
+ this.reapInterval = setInterval(async () => {
77
+ try {
78
+ const reapedCount = await this.reapZombies();
79
+ if (reapedCount > 0) {
80
+ console.log(`[ZombieReaper] Reaped ${reapedCount} zombie processes`);
81
+ this.emit('zombies-reaped', reapedCount);
82
+ }
83
+ }
84
+ catch (error) {
85
+ console.error('[ZombieReaper] Reap cycle failed:', error);
86
+ this.emit('reap-error', error);
87
+ }
88
+ }, intervalMs);
89
+ this.emit('reaper-started');
90
+ }
91
+ /**
92
+ * Stop automatic zombie reaping
93
+ */
94
+ stopReaping() {
95
+ if (!this.isReaping) {
96
+ // Still clean up signal handlers even if not actively reaping
97
+ this.cleanupSignalHandlers();
98
+ return;
99
+ }
100
+ this.isReaping = false;
101
+ if (this.reapInterval) {
102
+ clearInterval(this.reapInterval);
103
+ this.reapInterval = null;
104
+ }
105
+ // Clean up signal handlers
106
+ this.cleanupSignalHandlers();
107
+ console.log('[ZombieReaper] Stopped zombie reaper');
108
+ this.emit('reaper-stopped');
109
+ }
110
+ /**
111
+ * Detect zombie processes in the system
112
+ */
113
+ async detectZombies() {
114
+ try {
115
+ // Use ps to find zombie processes
116
+ // Format: PID PPID STATE COMMAND
117
+ const { stdout } = await execAsync('ps axo pid,ppid,state,command | grep -E "Z|<defunct>"');
118
+ const zombies = [];
119
+ const lines = stdout.trim().split('\n');
120
+ const seenPids = new Set();
121
+ for (const line of lines) {
122
+ // Skip grep process itself
123
+ if (line.includes('grep -E'))
124
+ continue;
125
+ const match = line.match(/^\s*(\d+)\s+(\d+)\s+([ZT])\S*\s+(.+)$/);
126
+ if (match) {
127
+ const pid = parseInt(match[1], 10);
128
+ const ppid = parseInt(match[2], 10);
129
+ const state = match[3];
130
+ const command = match[4];
131
+ // Avoid duplicates
132
+ if (seenPids.has(pid))
133
+ continue;
134
+ seenPids.add(pid);
135
+ // Check if it's truly a zombie
136
+ if (state === 'Z' || command.includes('<defunct>')) {
137
+ zombies.push({
138
+ pid,
139
+ ppid,
140
+ command: command.replace('<defunct>', '').trim(),
141
+ state: 'Z',
142
+ });
143
+ }
144
+ }
145
+ }
146
+ return zombies;
147
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
148
+ }
149
+ catch (error) {
150
+ // grep returns exit code 1 if no matches found
151
+ if (error.code === 1 &&
152
+ (error.stdout === '' || error.stdout === undefined)) {
153
+ return []; // No zombies found
154
+ }
155
+ throw error;
156
+ }
157
+ }
158
+ /**
159
+ * Check if a specific process is a zombie
160
+ */
161
+ async isZombie(pid) {
162
+ try {
163
+ const { stdout } = await execAsync(`ps -p ${pid} -o state=`);
164
+ const state = stdout.trim();
165
+ return state === 'Z' || state.startsWith('Z');
166
+ }
167
+ catch {
168
+ // Process doesn't exist or error checking
169
+ return false;
170
+ }
171
+ }
172
+ /**
173
+ * Reap zombie processes
174
+ */
175
+ async reapZombies() {
176
+ const zombies = await this.detectZombies();
177
+ let reapedCount = 0;
178
+ for (const zombie of zombies) {
179
+ try {
180
+ // Check if we're the parent of this zombie
181
+ if (zombie.ppid === process.pid) {
182
+ // We're the parent, we can reap it directly
183
+ // In Node.js, this typically happens automatically when using child_process
184
+ console.log(`[ZombieReaper] Reaping our zombie child: PID ${zombie.pid}`);
185
+ // Try to reap using waitpid equivalent
186
+ await this.reapChild(zombie.pid);
187
+ reapedCount++;
188
+ }
189
+ else if (zombie.ppid === 1) {
190
+ // Init is the parent, it should handle it
191
+ console.log(`[ZombieReaper] Zombie PID ${zombie.pid} is owned by init, skipping`);
192
+ }
193
+ else {
194
+ // Try to notify the parent to reap its child
195
+ try {
196
+ process.kill(zombie.ppid, 'SIGCHLD');
197
+ console.log(`[ZombieReaper] Sent SIGCHLD to parent PID ${zombie.ppid} for zombie ${zombie.pid}`);
198
+ }
199
+ catch {
200
+ console.log(`[ZombieReaper] Parent PID ${zombie.ppid} not accessible for zombie ${zombie.pid}`);
201
+ }
202
+ }
203
+ }
204
+ catch (error) {
205
+ console.error(`[ZombieReaper] Failed to reap zombie PID ${zombie.pid}:`, error);
206
+ }
207
+ }
208
+ // Also check for any terminated children we haven't reaped
209
+ reapedCount += await this.reapTerminatedChildren();
210
+ return reapedCount;
211
+ }
212
+ /**
213
+ * Reap a specific child process
214
+ */
215
+ async reapChild(pid) {
216
+ // In a real implementation, we would use waitpid() system call
217
+ // For Node.js, we rely on automatic reaping when child_process objects are handled
218
+ // This is a placeholder for demonstration
219
+ try {
220
+ // Try to send signal 0 to check if process exists
221
+ process.kill(pid, 0);
222
+ // If we get here, process still exists as zombie
223
+ // In production, would use native binding to call waitpid()
224
+ console.log(`[ZombieReaper] Would reap zombie PID ${pid} with waitpid()`);
225
+ // For testing, we can try to force cleanup
226
+ await execAsync(`kill -9 ${pid} 2>/dev/null || true`);
227
+ }
228
+ catch {
229
+ // Process doesn't exist or already reaped
230
+ }
231
+ }
232
+ /**
233
+ * Reap any terminated children that haven't been reaped yet
234
+ */
235
+ async reapTerminatedChildren() {
236
+ let reapedCount = 0;
237
+ // In Node.js, we don't have direct access to waitpid
238
+ // This would require a native addon in production
239
+ // For now, we'll use a workaround
240
+ try {
241
+ // Check if any of our children are zombies
242
+ const { stdout } = await execAsync(`ps --ppid ${process.pid} -o pid,state | grep Z`);
243
+ const lines = stdout.trim().split('\n');
244
+ for (const line of lines) {
245
+ const match = line.match(/^\s*(\d+)\s+Z/);
246
+ if (match) {
247
+ const childPid = parseInt(match[1], 10);
248
+ await this.reapChild(childPid);
249
+ reapedCount++;
250
+ }
251
+ }
252
+ }
253
+ catch {
254
+ // No zombie children or error checking
255
+ }
256
+ return reapedCount;
257
+ }
258
+ /**
259
+ * Monitor system for zombie accumulation
260
+ */
261
+ async monitorZombieCount() {
262
+ const zombies = await this.detectZombies();
263
+ const count = zombies.length;
264
+ if (count > 10) {
265
+ console.warn(`[ZombieReaper] WARNING: High zombie count detected: ${count}`);
266
+ this.emit('high-zombie-count', count);
267
+ }
268
+ return count;
269
+ }
270
+ /**
271
+ * Clean up resources on shutdown
272
+ */
273
+ cleanup() {
274
+ this.stopReaping();
275
+ this.removeAllListeners();
276
+ }
277
+ }
278
+ //# sourceMappingURL=zombie-reaper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zombie-reaper.js","sourceRoot":"","sources":["../../../src/daemon/zombie-reaper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Process Manager Module
3
+ *
4
+ * This module provides process management functionality for the procman system.
5
+ * It includes classes for managing individual processes and orchestrating
6
+ * multiple processes with lifecycle management, monitoring, and statistics.
7
+ */
8
+ export { ProcessManager } from './process-manager.js';
9
+ export { ManagedProcessInfo } from './managed-process-info.js';
10
+ export type { ProcessConfig } from './process-manager.js';
11
+ export type { ProcessStatistics, ManagedProcessEvents, } from './managed-process-info.js';
12
+ export type { ProcessInfo, ProcessStatus } from '../shared/process.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/process-manager/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,YAAY,EACV,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Process Manager Module
3
+ *
4
+ * This module provides process management functionality for the procman system.
5
+ * It includes classes for managing individual processes and orchestrating
6
+ * multiple processes with lifecycle management, monitoring, and statistics.
7
+ */
8
+ // Main exports
9
+ export { ProcessManager } from './process-manager.js';
10
+ export { ManagedProcessInfo } from './managed-process-info.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/process-manager/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Process Manager Interface Exports
3
+ *
4
+ * This module exports all interfaces for the process manager components.
5
+ */
6
+ export * from './process-lifecycle.js';
7
+ export * from './process-monitor.js';
8
+ export * from './process-persistence.js';
9
+ export * from './process-group.js';
10
+ /**
11
+ * Main process manager interface that coordinates all components
12
+ */
13
+ export interface MainProcessManager {
14
+ /** Lifecycle management component */
15
+ lifecycle: import('./process-lifecycle').ProcessLifecycleManager;
16
+ /** Monitoring component */
17
+ monitor: import('./process-monitor').ProcessMonitor;
18
+ /** Persistence component */
19
+ persistence: import('./process-persistence').ProcessPersistence;
20
+ /** Group management component */
21
+ groups: import('./process-group').ProcessGroupManager;
22
+ /**
23
+ * Initialize all components
24
+ */
25
+ initialize(): Promise<void>;
26
+ /**
27
+ * Cleanup all components
28
+ */
29
+ cleanup(): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/process-manager/interfaces/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,wBAAwB,CAAC;AAGvC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,oBAAoB,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,SAAS,EAAE,OAAO,qBAAqB,EAAE,uBAAuB,CAAC;IAEjE,2BAA2B;IAC3B,OAAO,EAAE,OAAO,mBAAmB,EAAE,cAAc,CAAC;IAEpD,4BAA4B;IAC5B,WAAW,EAAE,OAAO,uBAAuB,EAAE,kBAAkB,CAAC;IAEhE,iCAAiC;IACjC,MAAM,EAAE,OAAO,iBAAiB,EAAE,mBAAmB,CAAC;IAEtD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Process Manager Interface Exports
3
+ *
4
+ * This module exports all interfaces for the process manager components.
5
+ */
6
+ // Lifecycle management
7
+ export * from './process-lifecycle.js';
8
+ // Process monitoring
9
+ export * from './process-monitor.js';
10
+ // Persistence management
11
+ export * from './process-persistence.js';
12
+ // Group management
13
+ export * from './process-group.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/process-manager/interfaces/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uBAAuB;AACvB,cAAc,wBAAwB,CAAC;AAEvC,qBAAqB;AACrB,cAAc,sBAAsB,CAAC;AAErC,yBAAyB;AACzB,cAAc,0BAA0B,CAAC;AAEzC,mBAAmB;AACnB,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Process Group Management Interface
3
+ *
4
+ * Handles namespace-based grouping and batch operations:
5
+ * - Group management by namespace
6
+ * - Batch operations on process groups
7
+ * - Dependency management foundation
8
+ */
9
+ import { ProcessInfo } from '../../shared/process.js';
10
+ /**
11
+ * Namespace status summary
12
+ */
13
+ export interface NamespaceStatus {
14
+ /** Namespace name */
15
+ namespace: string;
16
+ /** Total number of processes */
17
+ total: number;
18
+ /** Number of online processes */
19
+ online: number;
20
+ /** Number of stopped processes */
21
+ stopped: number;
22
+ /** Number of errored processes */
23
+ errored: number;
24
+ /** Number of processes in other states */
25
+ other: number;
26
+ }
27
+ /**
28
+ * Result of a batch operation
29
+ */
30
+ export interface BatchOperationResult {
31
+ /** Overall success status */
32
+ success: boolean;
33
+ /** Results for individual processes */
34
+ results: Array<{
35
+ /** Process name */
36
+ name: string;
37
+ /** Whether this specific operation succeeded */
38
+ success: boolean;
39
+ /** Error message if this operation failed */
40
+ error?: string;
41
+ }>;
42
+ /** Summary of successful operations */
43
+ successCount: number;
44
+ /** Summary of failed operations */
45
+ failureCount: number;
46
+ }
47
+ /**
48
+ * Process dependency configuration
49
+ */
50
+ export interface ProcessDependency {
51
+ /** Process name that depends on others */
52
+ name: string;
53
+ /** Array of process names this process depends on */
54
+ dependsOn: string[];
55
+ /** Maximum wait time in milliseconds for dependencies to start */
56
+ waitTimeout?: number;
57
+ }
58
+ /**
59
+ * Dependency resolution result
60
+ */
61
+ export interface DependencyResolutionResult {
62
+ /** Processes that can be started immediately (no dependencies) */
63
+ independent: string[];
64
+ /** Processes with dependencies, in order of dependency levels */
65
+ dependent: string[][];
66
+ /** Processes with circular dependencies */
67
+ circular: string[];
68
+ }
69
+ /**
70
+ * Interface for process group management
71
+ */
72
+ export interface ProcessGroupManager {
73
+ /**
74
+ * Get all available namespaces
75
+ * @returns Array of namespace names
76
+ */
77
+ getNamespaces(): string[];
78
+ /**
79
+ * Get status summary for a namespace
80
+ * @param namespace Namespace name
81
+ * @returns Status summary
82
+ */
83
+ getNamespaceStatus(namespace: string): NamespaceStatus;
84
+ /**
85
+ * Get all processes in a namespace
86
+ * @param namespace Namespace name
87
+ * @returns Array of process information
88
+ */
89
+ getProcessesByNamespace(namespace: string): ProcessInfo[];
90
+ /**
91
+ * Get process names in a namespace
92
+ * @param namespace Namespace name
93
+ * @returns Array of process names
94
+ */
95
+ getProcessNamesByNamespace(namespace: string): string[];
96
+ /**
97
+ * Start all processes in a namespace
98
+ * @param namespace Namespace name
99
+ * @returns Promise resolving to batch operation result
100
+ */
101
+ startNamespace(namespace: string): Promise<BatchOperationResult>;
102
+ /**
103
+ * Stop all processes in a namespace
104
+ * @param namespace Namespace name
105
+ * @returns Promise resolving to batch operation result
106
+ */
107
+ stopNamespace(namespace: string): Promise<BatchOperationResult>;
108
+ /**
109
+ * Restart all processes in a namespace
110
+ * @param namespace Namespace name
111
+ * @returns Promise resolving to batch operation result
112
+ */
113
+ restartNamespace(namespace: string): Promise<BatchOperationResult>;
114
+ /**
115
+ * Start multiple processes
116
+ * @param names Array of process names
117
+ * @returns Promise resolving to batch operation result
118
+ */
119
+ startProcesses(names: string[]): Promise<BatchOperationResult>;
120
+ /**
121
+ * Stop multiple processes
122
+ * @param names Array of process names
123
+ * @returns Promise resolving to batch operation result
124
+ */
125
+ stopProcesses(names: string[]): Promise<BatchOperationResult>;
126
+ /**
127
+ * Restart multiple processes
128
+ * @param names Array of process names
129
+ * @returns Promise resolving to batch operation result
130
+ */
131
+ restartProcesses(names: string[]): Promise<BatchOperationResult>;
132
+ /**
133
+ * Configure a process dependency
134
+ * @param dependency Dependency configuration
135
+ */
136
+ configureDependency(dependency: ProcessDependency): void;
137
+ /**
138
+ * Remove a process dependency
139
+ * @param name Process name
140
+ */
141
+ removeDependency(name: string): void;
142
+ /**
143
+ * Get dependency configuration for a process
144
+ * @param name Process name
145
+ * @returns Dependency configuration or undefined
146
+ */
147
+ getDependency(name: string): ProcessDependency | undefined;
148
+ /**
149
+ * Get all dependency configurations
150
+ * @returns Array of dependency configurations
151
+ */
152
+ getAllDependencies(): ProcessDependency[];
153
+ /**
154
+ * Resolve dependencies for a set of processes
155
+ * @param names Array of process names
156
+ * @returns Dependency resolution result
157
+ */
158
+ resolveDependencies(names: string[]): DependencyResolutionResult;
159
+ /**
160
+ * Start processes with dependency resolution
161
+ * @param names Array of process names
162
+ * @returns Promise resolving to batch operation result
163
+ */
164
+ startProcessesWithDependencies(names: string[]): Promise<BatchOperationResult>;
165
+ }
166
+ /**
167
+ * Event types emitted by ProcessGroupManager
168
+ */
169
+ export interface ProcessGroupEvents {
170
+ /** Namespace operation started */
171
+ 'namespace:operation-start': {
172
+ namespace: string;
173
+ operation: 'start' | 'stop' | 'restart';
174
+ };
175
+ /** Namespace operation completed */
176
+ 'namespace:operation-complete': {
177
+ namespace: string;
178
+ operation: 'start' | 'stop' | 'restart';
179
+ result: BatchOperationResult;
180
+ };
181
+ /** Batch operation started */
182
+ 'batch:operation-start': {
183
+ operation: 'start' | 'stop' | 'restart';
184
+ processCount: number;
185
+ };
186
+ /** Batch operation completed */
187
+ 'batch:operation-complete': {
188
+ operation: 'start' | 'stop' | 'restart';
189
+ result: BatchOperationResult;
190
+ };
191
+ /** Dependency configured */
192
+ 'dependency:configured': {
193
+ dependency: ProcessDependency;
194
+ };
195
+ /** Dependency removed */
196
+ 'dependency:removed': {
197
+ name: string;
198
+ };
199
+ }
200
+ //# sourceMappingURL=process-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-group.d.ts","sourceRoot":"","sources":["../../../../src/process-manager/interfaces/process-group.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Process Group Management Interface
3
+ *
4
+ * Handles namespace-based grouping and batch operations:
5
+ * - Group management by namespace
6
+ * - Batch operations on process groups
7
+ * - Dependency management foundation
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=process-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-group.js","sourceRoot":"","sources":["../../../../src/process-manager/interfaces/process-group.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}