如何正确终止targets管道进程,避免残留后台进程?
解决targets+crew并行管道残留进程问题
正确终止tar_make的方法
- 不要直接点击RStudio任务面板的终止按钮,优先在R控制台执行
crew::crew_stop():这个命令会主动通知crew集群停止所有工作进程,让tar_make正常完成收尾流程,避免残留后台进程。 - 若控制台无法操作,找到当前R会话的主PID(可通过
ps aux | grep R在Linux终端查询),执行kill -TERM <主PID>:该信号会被crew捕获,触发子进程的自动清理,比强制终止任务更安全。
自动清理残留进程的方案
- 启动管道前主动清理:在调用
tar_make()前加入检查代码,提前清理残留进程:# 检查并停止现存的crew集群 if (exists("crew_cluster")) { try(crew::crew_stop(crew_cluster), silent = TRUE) } # 快速清理所有crew工作进程 system("pkill -f 'crew_worker'", ignore.stderr = TRUE) - 配置crew自动超时:创建crew集群时设置
timeout参数,让闲置进程自动退出:library(crew) crew_cluster <- crew_cluster( controller = crew_controller_local( timeout = 300L # 闲置5分钟后自动终止进程 ) ) tar_make(cluster = crew_cluster) - 系统级定时清理:在Linux系统中添加crontab定时任务,定期清理残留的crew worker进程:
执行# 每小时清理一次crew工作进程,输出重定向避免邮件通知 0 * * * * pkill -f 'crew_worker' > /dev/null 2>&1crontab -e编辑定时任务,将上述内容添加进去即可。
调试时的临时处理
如果调试时遇到残留进程报错,直接在R控制台执行system("pkill -f 'crew_worker'"),快速清理所有crew工作进程后即可重新启动tar_make。
内容的提问来源于stack exchange,提问作者tkx68
相关产品推荐
相关产品推荐

