Qt笔记-QProcess带管道符号运行及获取进程启动时间(Linux)

x33g5p2x  于2021-12-14 转载在 Linux  
字(1.0k)|赞(0)|评价(0)|浏览(526)

这里不能用直接写到QProcess中start中的command参数。

比如这样的shell:

ps -eo pid,lstart | grep 1808

采用这样的方式:

QProcess p;
p.start("sh", QStringList() << "-c" << "ps -eo pid,lstart | grep 1808");
p.waitForFinished();

这样也是可以的:

QString cmd = "ps -ef | awk '{print $2,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17}'";
QProcess p;
p.start("bash", QStringList() << "-c" << cmd);

即可获取。但看下这条命令:

这个时间的输出对中国人来说很不友好,在此改变下。

date -d "`ps -eo lstart,pid,cmd | grep 1808 | grep -v grep | awk '{print $1,$2,$3,$4,$5}'`" "+%Y-%m-%d:%H:%M:%S"

linux输出如下:

需要的就是这个,在QProcess中这么放就可以了。

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
#include <QDateTime>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QProcess p;
    p.start("sh", QStringList() << "-c" << "date -d \"`ps -eo lstart,pid,cmd |grep 1808|grep -v grep|awk '{print $1,$2,$3,$4,$5}'`\" \"+%Y-%m-%d %H:%M:%S\"");
    p.waitForFinished();

    QString read = p.readAll().trimmed();
    qDebug() << read;

    return a.exec();
}

运行截图:

相关文章