进程完成后运行bash命令

埃姆雷姆拉

我有两个使用GPU和训练ML模型的脚本。我想在入睡前启动它们,以便它们在晚上工作,并希望在早晨看到一些结果。

但是由于GPU内存有限,我想以串行方式而不是并行方式运行它们。

我可以这样做python train_v1.py && python train_v2.py; 但是,假设我开始训练train_v1同时,由于培训需要很长时间,因此我开始并完成了第二个脚本的实现train_v2.py,我想在python train_v1.py完成后自动运行它

我该如何实现?谢谢你。

乔尔

这是一种不涉及循环和检查其他进程是否仍然存在的方法,或者不train_v1.py以通常的方式进行调用

$ python train_v1.py
^Z
[1]+  Stopped                 python train_v1.py
$ % && python train_v2.py

^Z是我按下Ctrl+ Z,而正在运行的进程睡眠train_v1.py通过发送一个SIGTSTP信号。然后,我告诉shell使用唤醒它%,并使用它作为命令,并&& python train_v2.py在末尾添加这使得它的行为就像您python train_v1.py && python train_v2.py从一开始就做的一样。

相反%,您也可以使用fg这是同一件事。如果您想了解有关Shell的这些类型的更多信息,可以在bash的联机帮助页的“ JOB CONTROL”部分中对其进行阅读

编辑:如何继续添加到队列

正如jamesdlin在评论中指出的那样,如果您尝试继续添加模式train_v3.py(例如在v2开始之前),则会发现您无法执行以下操作:

$ % && python train_v2.py
^Z
[1]+  Stopped                 python train_v1.py

只有train_v1.py被停止,因为train_v2.py还没有开始,你不能停止/暂停/睡眠的东西,甚至还没有开始。

$ % && python train_v3.py

将导致与

python train_v1.py && python train_v3.py

因为它%对应于上一个暂停的进程。与其尝试添加v3类似内容,不如使用历史记录:

$ !! && python train_v3.py
% && python train_v2.py && python train_v3.py

可以像上面那样进行历史扩展,或者使用键盘绑定(如up)调用最后一个命令,然后在末尾添加v3。

$ % && python train_v2.py && python train_v3.py

可以重复进行此操作以将更多内容添加到管道中。

$ !! && python train_v3.py
% && python train_v2.py && python train_v3.py
^Z
[1]+  Stopped                 python train_v1.py
$ !! && python train_v4.py
% && python train_v2.py && python train_v3.py && python train_v4.py

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章