@3leaps/sysprims 0.1.11 → 0.1.13
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.
- package/dist/ffi.d.ts +2 -0
- package/dist/ffi.d.ts.map +1 -1
- package/dist/ffi.js.map +1 -1
- package/dist/index.d.ts +52 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +59 -0
- package/dist/types.d.ts.map +1 -1
- package/native/src/lib.rs +152 -0
- package/package.json +8 -8
package/dist/ffi.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export type SysprimsLib = {
|
|
|
20
20
|
sysprimsProcListeningPorts: (filterJson: string) => SysprimsCallJsonResult;
|
|
21
21
|
sysprimsProcWaitPid: (pid: number, timeoutMs: number) => SysprimsCallJsonResult;
|
|
22
22
|
sysprimsProcListFds: (pid: number, filterJson: string) => SysprimsCallJsonResult;
|
|
23
|
+
sysprimsProcDescendants: (rootPid: number, maxLevels: number, filterJson: string) => SysprimsCallJsonResult;
|
|
24
|
+
sysprimsProcKillDescendants: (rootPid: number, maxLevels: number, signal: number, filterJson: string) => SysprimsCallJsonResult;
|
|
23
25
|
sysprimsSelfGetpgid: () => SysprimsCallU32Result;
|
|
24
26
|
sysprimsSelfGetsid: () => SysprimsCallU32Result;
|
|
25
27
|
sysprimsSignalSend: (pid: number, signal: number) => SysprimsCallVoidResult;
|
package/dist/ffi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffi.d.ts","sourceRoot":"","sources":["../src/ffi.ts"],"names":[],"mappings":"AAQA,wBAAgB,YAAY,IAAI,WAAW,CAQ1C;AAcD,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACvF,MAAM,MAAM,qBAAqB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACvF,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,WAAW,GAAG;IACxB,kBAAkB,EAAE,MAAM,MAAM,CAAC;IAGjC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;IACzD,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IACjE,0BAA0B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAC3E,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAChF,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAGjF,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;IACjD,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;IAGhD,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAC5E,uBAAuB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAClF,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAC3D,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAG3D,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAGnF,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;CACtE,CAAC;AAUF,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,sBAAsB,GAAG,OAAO,CAMxE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,qBAAqB,GAAG,MAAM,CAMlE;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,sBAAsB,GAAG,IAAI,CAK/D"}
|
|
1
|
+
{"version":3,"file":"ffi.d.ts","sourceRoot":"","sources":["../src/ffi.ts"],"names":[],"mappings":"AAQA,wBAAgB,YAAY,IAAI,WAAW,CAQ1C;AAcD,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACvF,MAAM,MAAM,qBAAqB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACvF,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,WAAW,GAAG;IACxB,kBAAkB,EAAE,MAAM,MAAM,CAAC;IAGjC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;IACzD,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IACjE,0BAA0B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAC3E,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAChF,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAGjF,uBAAuB,EAAE,CACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,KACf,sBAAsB,CAAC;IAC5B,2BAA2B,EAAE,CAC3B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACf,sBAAsB,CAAC;IAG5B,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;IACjD,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;IAGhD,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAC5E,uBAAuB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAClF,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAC3D,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAG3D,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAGnF,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,sBAAsB,CAAC;CACtE,CAAC;AAUF,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,sBAAsB,GAAG,OAAO,CAMxE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,qBAAqB,GAAG,MAAM,CAMlE;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,sBAAsB,GAAG,IAAI,CAK/D"}
|
package/dist/ffi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffi.js","sourceRoot":"","sources":["../src/ffi.ts"],"names":[],"mappings":";;;;;AAQA,oCAQC;
|
|
1
|
+
{"version":3,"file":"ffi.js","sourceRoot":"","sources":["../src/ffi.ts"],"names":[],"mappings":";;;;;AAQA,oCAQC;AAkED,wCAMC;AAED,gCAMC;AAED,4BAKC;AAvGD,sDAAyB;AACzB,0DAA6B;AAC7B,qCAA4D;AAE5D,qCAA6C;AAE7C,IAAI,MAAM,GAAuB,IAAI,CAAC;AAEtC,SAAgB,YAAY;IAC1B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAE/C,MAAM,GAAG,GAAgB,IAAA,0BAAiB,EAAC,WAAW,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,CAAC;IACb,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACrD,IAAI,iBAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,OAAO,CAAC;QAC7C,MAAM,MAAM,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,MAAM;QAC9B,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC5E,CAAC;AA8CD,SAAS,kBAAkB,CAAC,IAAY,EAAE,OAAgB;IACxD,MAAM,cAAc,GAAG,UAAU,IAAI,GAAG,CAAC;IACzC,MAAM,IAAI,sBAAa,CACrB,IAAyB,EACzB,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,cAAc,EAAE,CAC5E,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,EAAgC;IAC7D,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;IACf,IAAI,CAAC,CAAC,IAAI,KAAK,0BAAiB,CAAC,EAAE,EAAE,CAAC;QACpC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,UAAU,CAAC,EAA+B;IACxD,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;IACf,IAAI,CAAC,CAAC,IAAI,KAAK,0BAAiB,CAAC,EAAE,EAAE,CAAC;QACpC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAQ,CAAC,CAAC,KAAgB,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,QAAQ,CAAC,EAAgC;IACvD,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;IACf,IAAI,CAAC,CAAC,IAAI,KAAK,0BAAiB,CAAC,EAAE,EAAE,CAAC;QACpC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SysprimsError, SysprimsErrorCode } from "./errors";
|
|
2
|
-
import type { BatchKillResult, FdFilter, FdSnapshot, PortBindingsSnapshot, PortFilter, ProcessFilter, ProcessInfo, ProcessSnapshot, SpawnInGroupConfig, SpawnInGroupResult, TerminateTreeConfig, TerminateTreeResult, WaitPidResult } from "./types";
|
|
2
|
+
import type { BatchKillResult, DescendantsOptions, DescendantsResult, FdFilter, FdSnapshot, KillDescendantsOptions, KillDescendantsResult, PortBindingsSnapshot, PortFilter, ProcessFilter, ProcessInfo, ProcessSnapshot, SpawnInGroupConfig, SpawnInGroupResult, TerminateTreeConfig, TerminateTreeResult, WaitPidResult } from "./types";
|
|
3
3
|
export { SysprimsError, SysprimsErrorCode };
|
|
4
|
-
export type { BatchKillFailure, BatchKillResult, FdFilter, FdSnapshot, PortBinding, PortBindingsSnapshot, PortFilter, ProcessFilter, ProcessInfo, ProcessSnapshot, ProcessState, Protocol, SpawnInGroupConfig, SpawnInGroupResult, TerminateTreeConfig, TerminateTreeResult, WaitPidResult, } from "./types";
|
|
4
|
+
export type { BatchKillFailure, BatchKillResult, DescendantsLevel, DescendantsOptions, DescendantsResult, FdFilter, FdSnapshot, KillDescendantsFailure, KillDescendantsOptions, KillDescendantsResult, PortBinding, PortBindingsSnapshot, PortFilter, ProcessFilter, ProcessInfo, ProcessSnapshot, ProcessState, Protocol, SpawnInGroupConfig, SpawnInGroupResult, TerminateTreeConfig, TerminateTreeResult, WaitPidResult, } from "./types";
|
|
5
5
|
/**
|
|
6
6
|
* Get information about a specific process by PID.
|
|
7
7
|
*
|
|
@@ -66,6 +66,56 @@ export declare function processList(filter?: ProcessFilter): ProcessSnapshot;
|
|
|
66
66
|
* const http = listeningPorts({ local_port: 8080 });
|
|
67
67
|
*/
|
|
68
68
|
export declare function listeningPorts(filter?: PortFilter): PortBindingsSnapshot;
|
|
69
|
+
/**
|
|
70
|
+
* Get descendants of a process.
|
|
71
|
+
*
|
|
72
|
+
* Performs a BFS traversal of the process tree starting at `pid` and returns
|
|
73
|
+
* processes grouped by depth level.
|
|
74
|
+
*
|
|
75
|
+
* @param pid - Root process ID to traverse from
|
|
76
|
+
* @param options - Optional traversal configuration
|
|
77
|
+
* @returns Descendants grouped by level with metadata
|
|
78
|
+
* @throws {SysprimsError} NotFound if root process does not exist
|
|
79
|
+
* @throws {SysprimsError} InvalidArgument if pid is 0 or filter is invalid
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* // Get all descendants
|
|
83
|
+
* const result = descendants(1234);
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* // Get direct children only
|
|
87
|
+
* const result = descendants(1234, { maxLevels: 1 });
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* // Filter descendants by name
|
|
91
|
+
* const result = descendants(1234, { filter: { name_contains: "worker" } });
|
|
92
|
+
*/
|
|
93
|
+
export declare function descendants(pid: number, options?: DescendantsOptions): DescendantsResult;
|
|
94
|
+
/**
|
|
95
|
+
* Kill descendants of a process.
|
|
96
|
+
*
|
|
97
|
+
* Traverses the process tree from `pid`, collects descendant PIDs, and sends
|
|
98
|
+
* the specified signal. Safety rules are enforced: root PID, self, PID 1, and
|
|
99
|
+
* parent are automatically excluded from the kill list.
|
|
100
|
+
*
|
|
101
|
+
* @param pid - Root process ID (will NOT be killed)
|
|
102
|
+
* @param signal - Signal number to send (default: 15 = SIGTERM)
|
|
103
|
+
* @param options - Optional configuration
|
|
104
|
+
* @returns Result with succeeded/failed PIDs and safety skip count
|
|
105
|
+
* @throws {SysprimsError} NotFound if root process does not exist
|
|
106
|
+
* @throws {SysprimsError} InvalidArgument if pid is 0 or filter is invalid
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* // Kill all descendants with SIGTERM
|
|
110
|
+
* const result = killDescendants(1234);
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* // Force kill descendants matching a filter
|
|
114
|
+
* const result = killDescendants(1234, 9, {
|
|
115
|
+
* filter: { cpu_above: 90 },
|
|
116
|
+
* });
|
|
117
|
+
*/
|
|
118
|
+
export declare function killDescendants(pid: number, signal?: number, options?: KillDescendantsOptions): KillDescendantsResult;
|
|
69
119
|
/**
|
|
70
120
|
* Wait for a PID to exit up to the provided timeout (milliseconds).
|
|
71
121
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,KAAK,EAEV,eAAe,EACf,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC;AAC5C,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,WAAW,EACX,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,MAAM,SAAS,CAAC;AAMjB;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAIhD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,eAAe,CAKnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,oBAAoB,CAKxE;AAMD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,CAIrE;AAMD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAKlE;AAMD;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAGjC;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAGhC;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG3C;AA8BD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAexE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAc7D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAc7D;AAMD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,CAiB5F;AAMD,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CAS3E"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,8 @@ exports.SysprimsErrorCode = exports.SysprimsError = void 0;
|
|
|
4
4
|
exports.procGet = procGet;
|
|
5
5
|
exports.processList = processList;
|
|
6
6
|
exports.listeningPorts = listeningPorts;
|
|
7
|
+
exports.descendants = descendants;
|
|
8
|
+
exports.killDescendants = killDescendants;
|
|
7
9
|
exports.waitPID = waitPID;
|
|
8
10
|
exports.listFds = listFds;
|
|
9
11
|
exports.selfPGID = selfPGID;
|
|
@@ -103,6 +105,74 @@ function listeningPorts(filter) {
|
|
|
103
105
|
return result;
|
|
104
106
|
}
|
|
105
107
|
// -----------------------------------------------------------------------------
|
|
108
|
+
// Descendants
|
|
109
|
+
// -----------------------------------------------------------------------------
|
|
110
|
+
const MAX_LEVELS_ALL = 0xFFFFFFFF; // u32::MAX
|
|
111
|
+
/**
|
|
112
|
+
* Get descendants of a process.
|
|
113
|
+
*
|
|
114
|
+
* Performs a BFS traversal of the process tree starting at `pid` and returns
|
|
115
|
+
* processes grouped by depth level.
|
|
116
|
+
*
|
|
117
|
+
* @param pid - Root process ID to traverse from
|
|
118
|
+
* @param options - Optional traversal configuration
|
|
119
|
+
* @returns Descendants grouped by level with metadata
|
|
120
|
+
* @throws {SysprimsError} NotFound if root process does not exist
|
|
121
|
+
* @throws {SysprimsError} InvalidArgument if pid is 0 or filter is invalid
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* // Get all descendants
|
|
125
|
+
* const result = descendants(1234);
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* // Get direct children only
|
|
129
|
+
* const result = descendants(1234, { maxLevels: 1 });
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* // Filter descendants by name
|
|
133
|
+
* const result = descendants(1234, { filter: { name_contains: "worker" } });
|
|
134
|
+
*/
|
|
135
|
+
function descendants(pid, options) {
|
|
136
|
+
const lib = (0, ffi_1.loadSysprims)();
|
|
137
|
+
const maxLevels = options?.maxLevels != null && isFinite(options.maxLevels)
|
|
138
|
+
? options.maxLevels >>> 0
|
|
139
|
+
: MAX_LEVELS_ALL;
|
|
140
|
+
const filterJson = options?.filter ? JSON.stringify(options.filter) : "";
|
|
141
|
+
return (0, ffi_1.callJsonReturn)(() => lib.sysprimsProcDescendants(pid >>> 0, maxLevels, filterJson));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Kill descendants of a process.
|
|
145
|
+
*
|
|
146
|
+
* Traverses the process tree from `pid`, collects descendant PIDs, and sends
|
|
147
|
+
* the specified signal. Safety rules are enforced: root PID, self, PID 1, and
|
|
148
|
+
* parent are automatically excluded from the kill list.
|
|
149
|
+
*
|
|
150
|
+
* @param pid - Root process ID (will NOT be killed)
|
|
151
|
+
* @param signal - Signal number to send (default: 15 = SIGTERM)
|
|
152
|
+
* @param options - Optional configuration
|
|
153
|
+
* @returns Result with succeeded/failed PIDs and safety skip count
|
|
154
|
+
* @throws {SysprimsError} NotFound if root process does not exist
|
|
155
|
+
* @throws {SysprimsError} InvalidArgument if pid is 0 or filter is invalid
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* // Kill all descendants with SIGTERM
|
|
159
|
+
* const result = killDescendants(1234);
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* // Force kill descendants matching a filter
|
|
163
|
+
* const result = killDescendants(1234, 9, {
|
|
164
|
+
* filter: { cpu_above: 90 },
|
|
165
|
+
* });
|
|
166
|
+
*/
|
|
167
|
+
function killDescendants(pid, signal = 15, options) {
|
|
168
|
+
const lib = (0, ffi_1.loadSysprims)();
|
|
169
|
+
const maxLevels = options?.maxLevels != null && isFinite(options.maxLevels)
|
|
170
|
+
? options.maxLevels >>> 0
|
|
171
|
+
: MAX_LEVELS_ALL;
|
|
172
|
+
const filterJson = options?.filter ? JSON.stringify(options.filter) : "";
|
|
173
|
+
return (0, ffi_1.callJsonReturn)(() => lib.sysprimsProcKillDescendants(pid >>> 0, maxLevels, signal | 0, filterJson));
|
|
174
|
+
}
|
|
175
|
+
// -----------------------------------------------------------------------------
|
|
106
176
|
// Wait
|
|
107
177
|
// -----------------------------------------------------------------------------
|
|
108
178
|
/**
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -26,9 +26,11 @@ export interface ProcessFilter {
|
|
|
26
26
|
name_equals?: string;
|
|
27
27
|
user_equals?: string;
|
|
28
28
|
pid_in?: number[];
|
|
29
|
+
ppid?: number;
|
|
29
30
|
state_in?: ProcessState[];
|
|
30
31
|
cpu_above?: number;
|
|
31
32
|
memory_above_kb?: number;
|
|
33
|
+
running_for_at_least_secs?: number;
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* Snapshot of running processes.
|
|
@@ -146,4 +148,61 @@ export interface BatchKillResult {
|
|
|
146
148
|
succeeded: number[];
|
|
147
149
|
failed: BatchKillFailure[];
|
|
148
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* A single level in a descendants traversal result.
|
|
153
|
+
*/
|
|
154
|
+
export interface DescendantsLevel {
|
|
155
|
+
level: number;
|
|
156
|
+
processes: ProcessInfo[];
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Result of a descendants traversal.
|
|
160
|
+
* Matches schema: descendants-result.schema.json
|
|
161
|
+
*/
|
|
162
|
+
export interface DescendantsResult {
|
|
163
|
+
schema_id: string;
|
|
164
|
+
root_pid: number;
|
|
165
|
+
max_levels: number;
|
|
166
|
+
levels: DescendantsLevel[];
|
|
167
|
+
total_found: number;
|
|
168
|
+
matched_by_filter: number;
|
|
169
|
+
timestamp: string;
|
|
170
|
+
platform: string;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Options for descendants traversal.
|
|
174
|
+
*/
|
|
175
|
+
export interface DescendantsOptions {
|
|
176
|
+
/** Maximum depth (1 = children only). Omit or use Infinity for all levels. */
|
|
177
|
+
maxLevels?: number;
|
|
178
|
+
/** Optional filter applied to descendant processes. */
|
|
179
|
+
filter?: ProcessFilter;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Options for kill-descendants operation.
|
|
183
|
+
*/
|
|
184
|
+
export interface KillDescendantsOptions {
|
|
185
|
+
/** Maximum depth. Omit or use Infinity for all levels. */
|
|
186
|
+
maxLevels?: number;
|
|
187
|
+
/** Optional filter applied to descendant processes. */
|
|
188
|
+
filter?: ProcessFilter;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* A single failure in a kill-descendants operation.
|
|
192
|
+
*/
|
|
193
|
+
export interface KillDescendantsFailure {
|
|
194
|
+
pid: number;
|
|
195
|
+
error: string;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Result of a kill-descendants operation.
|
|
199
|
+
*/
|
|
200
|
+
export interface KillDescendantsResult {
|
|
201
|
+
schema_id: string;
|
|
202
|
+
signal_sent: number;
|
|
203
|
+
root_pid: number;
|
|
204
|
+
succeeded: number[];
|
|
205
|
+
failed: KillDescendantsFailure[];
|
|
206
|
+
skipped_safety: number;
|
|
207
|
+
}
|
|
149
208
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAIjD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/native/src/lib.rs
CHANGED
|
@@ -237,6 +237,158 @@ pub fn sysprims_proc_wait_pid(pid: u32, timeout_ms: u32) -> SysprimsCallJsonResu
|
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
+
// -----------------------------------------------------------------------------
|
|
241
|
+
// Descendants
|
|
242
|
+
// -----------------------------------------------------------------------------
|
|
243
|
+
|
|
244
|
+
#[napi]
|
|
245
|
+
pub fn sysprims_proc_descendants(
|
|
246
|
+
root_pid: u32,
|
|
247
|
+
max_levels: u32,
|
|
248
|
+
filter_json: String,
|
|
249
|
+
) -> SysprimsCallJsonResult {
|
|
250
|
+
let filter = if filter_json.is_empty() || filter_json == "{}" {
|
|
251
|
+
None
|
|
252
|
+
} else {
|
|
253
|
+
match serde_json::from_str::<ProcessFilter>(&filter_json) {
|
|
254
|
+
Ok(f) => Some(f),
|
|
255
|
+
Err(e) => {
|
|
256
|
+
return err_json(SysprimsError::invalid_argument(format!(
|
|
257
|
+
"invalid filter JSON: {}",
|
|
258
|
+
e
|
|
259
|
+
)))
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
if let Some(ref f) = filter {
|
|
265
|
+
if let Err(e) = f.validate() {
|
|
266
|
+
return err_json(e);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
match sysprims_proc::descendants(root_pid, max_levels, filter.as_ref()) {
|
|
271
|
+
Ok(result) => match serde_json::to_string(&result) {
|
|
272
|
+
Ok(json) => ok_json(json),
|
|
273
|
+
Err(e) => err_json(SysprimsError::internal(format!(
|
|
274
|
+
"failed to serialize descendants result: {}",
|
|
275
|
+
e
|
|
276
|
+
))),
|
|
277
|
+
},
|
|
278
|
+
Err(e) => err_json(e),
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
#[napi]
|
|
283
|
+
pub fn sysprims_proc_kill_descendants(
|
|
284
|
+
root_pid: u32,
|
|
285
|
+
max_levels: u32,
|
|
286
|
+
signal: i32,
|
|
287
|
+
filter_json: String,
|
|
288
|
+
) -> SysprimsCallJsonResult {
|
|
289
|
+
let filter = if filter_json.is_empty() || filter_json == "{}" {
|
|
290
|
+
None
|
|
291
|
+
} else {
|
|
292
|
+
match serde_json::from_str::<ProcessFilter>(&filter_json) {
|
|
293
|
+
Ok(f) => Some(f),
|
|
294
|
+
Err(e) => {
|
|
295
|
+
return err_json(SysprimsError::invalid_argument(format!(
|
|
296
|
+
"invalid filter JSON: {}",
|
|
297
|
+
e
|
|
298
|
+
)))
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
if let Some(ref f) = filter {
|
|
304
|
+
if let Err(e) = f.validate() {
|
|
305
|
+
return err_json(e);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Traverse descendants
|
|
310
|
+
let desc_result = match sysprims_proc::descendants(root_pid, max_levels, filter.as_ref()) {
|
|
311
|
+
Ok(r) => r,
|
|
312
|
+
Err(e) => return err_json(e),
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
// Collect all descendant PIDs
|
|
316
|
+
let mut target_pids: Vec<u32> = desc_result
|
|
317
|
+
.levels
|
|
318
|
+
.iter()
|
|
319
|
+
.flat_map(|l| l.processes.iter().map(|p| p.pid))
|
|
320
|
+
.collect();
|
|
321
|
+
target_pids.sort_unstable();
|
|
322
|
+
target_pids.dedup();
|
|
323
|
+
|
|
324
|
+
// Safety: exclude root PID (descendants-only)
|
|
325
|
+
target_pids.retain(|&pid| pid != root_pid);
|
|
326
|
+
|
|
327
|
+
// Safety: exclude self, PID 1, parent
|
|
328
|
+
let self_pid = std::process::id();
|
|
329
|
+
let parent_pid = sysprims_proc::get_process(self_pid).ok().map(|p| p.ppid);
|
|
330
|
+
|
|
331
|
+
let before = target_pids.len();
|
|
332
|
+
target_pids.retain(|&pid| pid != self_pid && pid != 1);
|
|
333
|
+
if let Some(ppid) = parent_pid {
|
|
334
|
+
target_pids.retain(|&pid| pid != ppid);
|
|
335
|
+
}
|
|
336
|
+
let skipped_safety = before.saturating_sub(target_pids.len());
|
|
337
|
+
|
|
338
|
+
// Build result
|
|
339
|
+
let (succeeded, failed) = if target_pids.is_empty() {
|
|
340
|
+
(Vec::new(), Vec::<KillDescendantsFailureWire>::new())
|
|
341
|
+
} else {
|
|
342
|
+
match sysprims_signal::kill_many(&target_pids, signal) {
|
|
343
|
+
Ok(batch) => {
|
|
344
|
+
let failed_entries: Vec<KillDescendantsFailureWire> = batch
|
|
345
|
+
.failed
|
|
346
|
+
.iter()
|
|
347
|
+
.map(|f| KillDescendantsFailureWire {
|
|
348
|
+
pid: f.pid,
|
|
349
|
+
error: f.error.to_string(),
|
|
350
|
+
})
|
|
351
|
+
.collect();
|
|
352
|
+
(batch.succeeded, failed_entries)
|
|
353
|
+
}
|
|
354
|
+
Err(e) => return err_json(e),
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
let result = KillDescendantsResultWire {
|
|
359
|
+
schema_id: sysprims_core::schema::BATCH_KILL_RESULT_V1.to_string(),
|
|
360
|
+
signal_sent: signal,
|
|
361
|
+
root_pid,
|
|
362
|
+
succeeded,
|
|
363
|
+
failed,
|
|
364
|
+
skipped_safety,
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
match serde_json::to_string(&result) {
|
|
368
|
+
Ok(json) => ok_json(json),
|
|
369
|
+
Err(e) => err_json(SysprimsError::internal(format!(
|
|
370
|
+
"failed to serialize kill-descendants result: {}",
|
|
371
|
+
e
|
|
372
|
+
))),
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
#[derive(serde::Serialize)]
|
|
377
|
+
struct KillDescendantsFailureWire {
|
|
378
|
+
pid: u32,
|
|
379
|
+
error: String,
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
#[derive(serde::Serialize)]
|
|
383
|
+
struct KillDescendantsResultWire {
|
|
384
|
+
schema_id: String,
|
|
385
|
+
signal_sent: i32,
|
|
386
|
+
root_pid: u32,
|
|
387
|
+
succeeded: Vec<u32>,
|
|
388
|
+
failed: Vec<KillDescendantsFailureWire>,
|
|
389
|
+
skipped_safety: usize,
|
|
390
|
+
}
|
|
391
|
+
|
|
240
392
|
// -----------------------------------------------------------------------------
|
|
241
393
|
// Self Introspection
|
|
242
394
|
// -----------------------------------------------------------------------------
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@3leaps/sysprims",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13",
|
|
4
4
|
"description": "GPL-free cross-platform process utilities (TypeScript bindings via Node-API native addon)",
|
|
5
5
|
"license": "MIT OR Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -45,13 +45,13 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {},
|
|
47
47
|
"optionalDependencies": {
|
|
48
|
-
"@3leaps/sysprims-linux-x64-gnu": "0.1.
|
|
49
|
-
"@3leaps/sysprims-linux-x64-musl": "0.1.
|
|
50
|
-
"@3leaps/sysprims-linux-arm64-gnu": "0.1.
|
|
51
|
-
"@3leaps/sysprims-linux-arm64-musl": "0.1.
|
|
52
|
-
"@3leaps/sysprims-darwin-arm64": "0.1.
|
|
53
|
-
"@3leaps/sysprims-win32-x64-msvc": "0.1.
|
|
54
|
-
"@3leaps/sysprims-win32-arm64-msvc": "0.1.
|
|
48
|
+
"@3leaps/sysprims-linux-x64-gnu": "0.1.13",
|
|
49
|
+
"@3leaps/sysprims-linux-x64-musl": "0.1.13",
|
|
50
|
+
"@3leaps/sysprims-linux-arm64-gnu": "0.1.13",
|
|
51
|
+
"@3leaps/sysprims-linux-arm64-musl": "0.1.13",
|
|
52
|
+
"@3leaps/sysprims-darwin-arm64": "0.1.13",
|
|
53
|
+
"@3leaps/sysprims-win32-x64-msvc": "0.1.13",
|
|
54
|
+
"@3leaps/sysprims-win32-arm64-msvc": "0.1.13"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@napi-rs/cli": "^2.18.4",
|