在 GNU parallel 中运行的命令退出后,如何自动将 SIGINT 发送给由同一 GNU parallel 实例运行的另一个命令?

在 GNU parallel 中运行的命令退出后,如何自动将 SIGINT 发送给由同一 GNU parallel 实例运行的另一个命令?

这是我正在运行的命令:

parallel -u ::: 'watch -n 0.1 /home/cringeposter/zfs-mount.sh' 'watch -n 0.1 drill graph.microsoft.com' 'rclone bisync onedrive: /home/cringeposter/zfs/onedrive --verbose --check-access --ignore-checksum' 'rclone bisync onedrive-uni: /home/cringeposter/zfs/onedrive-uni --verbose --check-access --ignore-checksum'

这两个 rclone 命令在两个目录上进行双向同步。zfs-mount.sh需要该脚本是因为Linux 上的 ZFS 问题导致加密数据集被随机卸载,而drill需要该调用以避免 rclone 因无法解析域而停止(这样 IP 地址就会被 dnsmasq 缓存)。

现在我必须在 bisync 成功完成后手动停止 GNU parallel,方法是在终端仿真器中按 CTRL+C,但如果可以自动完成就好了。
两个watch进程退出后仍继续运行,有没有办法在两个进程都退出rclone后自动向它们发送 SIGINT ?rclone

答案1

那么(经过测试)怎么样:

parallel -j0 --halt now,done=2 --lb \
  ::: "ping pi.dk" "ping tange.dk" \
      "traceroute pi.dk" "traceroute tange.dk"

(未经测试):

parallel -j0 --halt now,done=2 --lb \
  ::: 'watch -n 0.1 /home/cringeposter/zfs-mount.sh' \
      'watch -n 0.1 drill graph.microsoft.com' \
      'rclone bisync onedrive: /home/cringeposter/zfs/onedrive --verbose --check-access --ignore-checksum' \
      'rclone bisync onedrive-uni: /home/cringeposter/zfs/onedrive-uni --verbose --check-access --ignore-checksum'

相关内容