【问题标题】:Make shell prompt wait till all processes complete让 shell 提示等待所有进程完成
【发布时间】:2015-05-25 16:24:19
【问题描述】:

我正在从一个 java 程序运行一个 shell 脚本。 shell脚本会启动多个scrapy爬虫。

#!/bin/bash
cd /Users/renny/Documents/WorkSpaces/Scrapy/tutorial

scrapy crawl flipkart -a key="$1" -o "$2"flipkart.xml
scrapy crawl myntra -a key="$1" -o "$2"myntra.xml
scrapy crawl jabong -a key="$1" -o "$2"jabong.xml

shell脚本不会等待scrapy爬虫完成。 我希望 shell 脚本仅在子进程完成后退出。 任何帮助表示赞赏。

【问题讨论】:

  • start 看起来像 Windows cmd,而不是 shell 脚本。对吗?

标签: bash shell process scrapy


【解决方案1】:

我不确定这个过程是如何被调用的,但假设它被称为scrapy,那么你可以通过使用忙等待来实现这一点。

while [ $(ps | grep scrapy | wc -l) -ge 1 ]; do 
    sleep 1; 
done
exit 0

或替代但等效

while [[ -n $(ps | grep scrapy) ]]; do 
    sleep 1; 
done
exit 0

【讨论】:

  • 我收到以下错误 ./crawls.sh: line 15: syntax error near unexpected token do' ./crawls.sh: line 15: while[$(ps|grep scrapy|wc -l) ge 1];do' could请你帮帮我,因为我真的不知道出了什么问题
  • @Renny,注意[ 是shell 中的命令,而不仅仅是语法。作为命令,您必须用空格将其与其他单词分开。仔细记下 ShellFish 回答中的所有空格。
  • @Renny 如果这些命令很长,请考虑增加睡眠以节省 CPU!
猜你喜欢
  • 1970-01-01
  • 2015-05-27
  • 2022-01-23
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多