API: process
进程管理模块。
函数
find(name)
查找指定名称的进程。
参数:
name(string) - 进程名称(不需要 .exe 后缀)
返回:
number|nil- 进程 ID (PID),未找到返回 nilboolean- 是否找到
示例:
lua
local pid, found = process.find("notepad")
if found then
print("找到记事本进程,PID: " .. pid)
endstart(path, args, workingDir)
启动新进程。
参数:
path(string) - 可执行文件路径args(string, 可选) - 命令行参数workingDir(string, 可选) - 工作目录
返回:
number- 新进程的 PID
示例:
lua
-- 启动记事本
local pid = process.start("notepad.exe")
-- 启动带参数的程序
local pid = process.start("cmd.exe", "/c dir C:\\")
-- 指定工作目录
local pid = process.start("cmd.exe", "", "C:\\Temp")wait(pid, timeout)
等待进程结束。
参数:
pid(number) - 进程 IDtimeout(number, 可选) - 超时时间(毫秒),0 表示无限等待
返回:
boolean- 进程是否已结束(超时返回 false)
示例:
lua
local pid = process.start("notepad.exe")
-- 等待进程结束(无限等待)
if process.wait(pid) then
print("进程已结束")
end
-- 带超时等待
if process.wait(pid, 5000) then
print("进程在5秒内结束")
else
print("等待超时")
endterminate(pid, force)
终止进程。
参数:
pid(number) - 进程 IDforce(boolean) - 是否强制终止
返回:
boolean- 是否成功
示例:
lua
local pid, found = process.find("notepad")
if found then
if process.terminate(pid, false) then
print("进程已终止")
end
endexists(pid)
检查进程是否存在。
参数:
pid(number) - 进程 ID
返回:
boolean- 进程是否存在
示例:
lua
local pid = 1234
if process.exists(pid) then
print("进程 " .. pid .. " 正在运行")
else
print("进程 " .. pid .. " 不存在")
endwaitFor(name, timeout)
等待进程出现。
参数:
name(string) - 进程名称timeout(number) - 超时时间(毫秒),默认 5000
返回:
boolean- 是否在超时前找到进程
示例:
lua
-- 启动应用程序
process.start("notepad.exe")
-- 等待进程出现
if process.waitFor("notepad", 5000) then
print("记事本进程已启动")
local pid, found = process.find("notepad")
print("PID: " .. pid)
else
print("超时:进程未启动")
end完整示例
lua
-- 检查记事本是否运行
local pid, found = process.find("notepad")
if not found then
print("记事本未运行,正在启动...")
pid = process.start("notepad.exe")
-- 等待进程启动
util.sleep(500)
end
-- 获取进程信息
pid, found = process.find("notepad")
if found then
print("记事本 PID: " .. pid)
-- 检查进程是否存在
if process.exists(pid) then
print("进程正在运行")
end
-- 等待5秒后终止
util.sleep(5000)
if process.terminate(pid, false) then
print("进程已终止")
end
end常见使用场景
启动并等待程序完成
lua
-- 启动命令行程序并等待完成
local pid = process.start("cmd.exe", "/c timeout 3")
if process.wait(pid, 5000) then
print("命令执行完成")
end确保只有一个实例
lua
-- 检查程序是否已运行
local pid, found = process.find("myapp")
if found then
print("程序已在运行,PID: " .. pid)
else
print("启动新实例...")
process.start("myapp.exe")
end关闭所有匹配的进程
lua
-- 注意:需要实现 process.findAll 才能列出所有匹配进程
-- 当前版本只能查找到的第一个进程
local pid, found = process.find("notepad")
while found do
process.terminate(pid, true)
util.sleep(100)
pid, found = process.find("notepad")
end注意事项
- 进程 ID (PID) 是系统分配的数字,每次运行可能不同
- 终止系统关键进程可能导致系统不稳定
- 管理员权限的进程需要管理员权限才能操作
- 使用
force=false优先让进程正常退出,force=true强制杀死