You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用taskset启动进程是否会等待其完成?未等待时如何实现串行执行?

问题结论

你当前写的循环逻辑默认就会串行执行任务,不需要额外修改:

  • 当你使用taskset -c [核心列表] 目标命令这种启动新进程的调用方式时,taskset 会主动等待启动的子进程完全执行结束后才会退出,属于阻塞式调用
  • shell脚本默认会等待前台运行的命令执行完成,再执行下一行语句,因此你的循环会自动等前一个processing_intense_task执行完,再选下一个目录启动新任务,不会出现多个任务并行的情况。

补充说明

taskset只有在操作已有运行中进程的亲和性时才会直接返回,对应语法是taskset -c [核心列表] -p [PID],这种场景才不会等待进程结束。

兜底防并行方案

如果担心脚本被重复启动、或者后续调整逻辑时意外触发并行,可以加文件锁做二次保险,修改后的代码如下:

#!/bin/bash
# 独占锁文件路径,防止多个任务并行
LOCK_FILE=/tmp/processing_task.lock

while :
do
  target_dir=$(select_dir) # 选择待处理的新目录
  # 拿锁后再执行任务,执行完自动释放锁
  flock -x "$LOCK_FILE" sudo taskset -c 4,5,6,7,8,9,10,11 ./processing_intense_task --dir "$target_dir"
done

这个方案即使你不小心同时启动了多个脚本实例,同一时间也只会有一个任务在运行,完全避免并行冲突。

内容的提问来源于stack exchange,提问作者julian bechtold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:15:05