73 lines
1.3 KiB
Go
73 lines
1.3 KiB
Go
// SPDX-License-Identifier: EUPL-1.2
|
|
|
|
package agentic
|
|
|
|
import (
|
|
core "dappco.re/go/core"
|
|
"dappco.re/go/core/process"
|
|
)
|
|
|
|
// alive := agentic.ProcessAlive(c, proc.ID, proc.Info().PID)
|
|
// alive := agentic.ProcessAlive(c, "", 12345) // legacy PID fallback
|
|
func ProcessAlive(c *core.Core, processID string, pid int) bool {
|
|
service, ok := lookupProcessService(c)
|
|
if !ok {
|
|
return false
|
|
}
|
|
|
|
if processID != "" {
|
|
if proc, err := service.Get(processID); err == nil {
|
|
return proc.IsRunning()
|
|
}
|
|
}
|
|
|
|
if pid <= 0 {
|
|
return false
|
|
}
|
|
|
|
for _, proc := range service.Running() {
|
|
if proc.Info().PID == pid {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// terminated := agentic.ProcessTerminate(c, proc.ID, proc.Info().PID)
|
|
func ProcessTerminate(c *core.Core, processID string, pid int) bool {
|
|
service, ok := lookupProcessService(c)
|
|
if !ok {
|
|
return false
|
|
}
|
|
|
|
if processID != "" {
|
|
if err := service.Kill(processID); err == nil {
|
|
return true
|
|
}
|
|
}
|
|
|
|
if pid <= 0 {
|
|
return false
|
|
}
|
|
|
|
for _, proc := range service.Running() {
|
|
if proc.Info().PID == pid {
|
|
return service.Kill(proc.ID) == nil
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func lookupProcessService(c *core.Core) (*process.Service, bool) {
|
|
if c == nil {
|
|
return nil, false
|
|
}
|
|
result := c.Service("process")
|
|
if !result.OK {
|
|
return nil, false
|
|
}
|
|
service, ok := result.Value.(*process.Service)
|
|
return service, ok
|
|
}
|