【问题标题】:Command run with shell but get stuck with QProcess命令使用 shell 运行,但被 QProcess 卡住
【发布时间】:2016-07-02 22:50:24
【问题描述】:

我正在尝试使用 QProcess 执行一些命令。从终端执行工作正常。

例如,我想执行以下命令:fpscan /path --report --verbose=2 --nospin(使用 f-prot 杀毒软件扫描文件)。 我正在尝试以下代码:

QProcess* p = new QProcess(this);
p->start("fpscan", params);

进程卡住了。

ps -Al | grep fpscan 输出我看到,这个进程打开了另一个进程。

process     |    WCHAN    |    TIME
1           |    wait     |  00:00:00
2           |    pipe_w   |  00:00:00

strace 命令:

  1. wait4(-1,
  2. 读取(0,

有什么建议吗?

P.S.:另一个命令 clamscan /path params 可以在 QProcess 上正常工作。

更新:我尝试过使用fork、execl,它可以工作,所以问题出在QT和QProcess。

pid_t pid = fork();
if (pid == 0) {
    execl("/usr/local/bin/fpscan", "fpscan", "/path", ... , NULL);
}

【问题讨论】:

  • 两者都具有相同的/path?因为可能有一些不好的符号。
  • 没问题,我用/tmp试过了。

标签: c++ linux qt qprocess


【解决方案1】:

看起来进程正在尝试从标准输入读取。

【讨论】:

  • 发生的情况是,当您使用普通 fork+exec 时,进程使用父级标准输入/标准输出,但 QProcess 将创建自己的管道。
猜你喜欢
  • 2023-03-03
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多