QProcess Class

QProcess 클래스는 외부 프로그램을 시작하고 외부 프로그램과 통신하는 데 사용됩니다. 더 보기...

헤더: #include <QProcess>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속합니다: QIODevice

참고: 이 클래스의 모든 함수는 재인용됩니다.

공용 유형

struct CreateProcessArguments
(since 6.6) struct UnixProcessParameters
CreateProcessArgumentModifier
enum ExitStatus { NormalExit, CrashExit }
enum InputChannelMode { ManagedInputChannel, ForwardedInputChannel }
enum ProcessChannel { StandardOutput, StandardError }
enum ProcessChannelMode { SeparateChannels, MergedChannels, ForwardedChannels, ForwardedErrorChannel, ForwardedOutputChannel }
enum ProcessError { FailedToStart, Crashed, Timedout, WriteError, ReadError, UnknownError }
enum ProcessState { NotRunning, Starting, Running }
(since 6.6) enum class UnixProcessFlag { CloseFileDescriptors, CreateNewSession, DisconnectControllingTerminal, IgnoreSigPipe, ResetIds, …, UseVFork }
flags UnixProcessFlags

공용 함수

QProcess(QObject *parent = nullptr)
virtual ~QProcess()
QStringList arguments() const
(since 6.0) std::function<void ()> childProcessModifier() const
void closeReadChannel(QProcess::ProcessChannel channel)
void closeWriteChannel()
QProcess::CreateProcessArgumentModifier createProcessArgumentsModifier() const
QProcess::ProcessError error() const
int exitCode() const
QProcess::ExitStatus exitStatus() const
(since 6.7) void failChildProcessModifier(const char *description, int error = 0)
QProcess::InputChannelMode inputChannelMode() const
QString nativeArguments() const
QProcess::ProcessChannelMode processChannelMode() const
QProcessEnvironment processEnvironment() const
qint64 processId() const
QString program() const
QByteArray readAllStandardError()
QByteArray readAllStandardOutput()
QProcess::ProcessChannel readChannel() const
void setArguments(const QStringList &arguments)
(since 6.0) void setChildProcessModifier(const std::function<void ()> &modifier)
void setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier)
void setInputChannelMode(QProcess::InputChannelMode mode)
void setNativeArguments(const QString &arguments)
void setProcessChannelMode(QProcess::ProcessChannelMode mode)
void setProcessEnvironment(const QProcessEnvironment &environment)
void setProgram(const QString &program)
void setReadChannel(QProcess::ProcessChannel channel)
void setStandardErrorFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
void setStandardInputFile(const QString &fileName)
void setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)
void setStandardOutputProcess(QProcess *destination)
(since 6.6) void setUnixProcessParameters(const QProcess::UnixProcessParameters &params)
(since 6.6) void setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly)
void setWorkingDirectory(const QString &dir)
void start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite)
void start(QIODeviceBase::OpenMode mode = ReadWrite)
(since 6.0) void startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite)
bool startDetached(qint64 *pid = nullptr)
QProcess::ProcessState state() const
(since 6.6) QProcess::UnixProcessParameters unixProcessParameters() const
bool waitForFinished(int msecs = 30000)
bool waitForStarted(int msecs = 30000)
QString workingDirectory() const

재구현된 공용 함수

virtual qint64 bytesToWrite() const override
virtual void close() override
virtual bool isSequential() const override
virtual bool open(QIODeviceBase::OpenMode mode = ReadWrite) override
virtual bool waitForBytesWritten(int msecs = 30000) override
virtual bool waitForReadyRead(int msecs = 30000) override

공용 슬롯

void kill()
void terminate()

Signals

void errorOccurred(QProcess::ProcessError error)
void finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit)
void readyReadStandardError()
void readyReadStandardOutput()
void started()
void stateChanged(QProcess::ProcessState newState)

정적 공용 멤버

int execute(const QString &program, const QStringList &arguments = {})
QString nullDevice()
QStringList splitCommand(QStringView command)
bool startDetached(const QString &program, const QStringList &arguments = {}, const QString &workingDirectory = QString(), qint64 *pid = nullptr)
QStringList systemEnvironment()

보호된 함수

void setProcessState(QProcess::ProcessState state)

재구현된 보호 함수

virtual qint64 readData(char *data, qint64 maxlen) override

상세 설명

프로세스 실행하기

프로세스를 시작하려면 실행하려는 프로그램의 이름과 명령줄 인수를 start()에 인자로 전달합니다. 인수는 QStringList 에 개별 문자열로 제공됩니다.

또는 setProgram() 및 setArguments()로 프로그램을 실행하도록 설정한 다음 start() 또는 open()를 호출할 수 있습니다.

예를 들어, 다음 코드 스니펫은 인수 목록에 "--style" 및 "fusion"이 포함된 문자열을 두 항목으로 전달하여 X11 플랫폼에서 Fusion 스타일의 아날로그 시계 예제를 실행합니다:

    QObject *parent;
    ...
    QString program = "./path/to/Qt/examples/widgets/analogclock";
    QStringList arguments;
    arguments << "-style" << "fusion";

    QProcess *myProcess = new QProcess(parent);
    myProcess->start(program, arguments);

그러면 QProcess는 Starting 상태로 들어가고 프로그램이 시작되면 Running 상태로 들어가고 started()를 출력합니다.

QProcess를 사용하면 프로세스를 순차적 I/O 장치로 취급할 수 있습니다. QTcpSocket 을 사용하여 네트워크 연결에 액세스하는 것처럼 프로세스에 쓰고 프로세스에서 읽을 수 있습니다. 그런 다음 write()를 호출하여 프로세스의 표준 입력에 쓰고 read(), readLine() 및 getChar()를 호출하여 표준 출력을 읽을 수 있습니다. QIODevice 을 상속하기 때문에 QProcess는 QXmlReader 의 입력 소스로 사용하거나 QNetworkAccessManager 을 사용하여 업로드할 데이터를 생성하는 데에도 사용할 수 있습니다.

프로세스가 종료되면 QProcess는 NotRunning 상태(초기 상태)로 다시 들어가고 finished()를 방출합니다.

finished() 신호는 프로세스의 종료 코드와 종료 상태를 인자로 제공하며, 마지막으로 종료한 프로세스의 종료 코드를 얻으려면 exitCode(), 종료 상태를 얻으려면 exitStatus()를 호출할 수도 있습니다. 특정 시점에 오류가 발생하면 QProcess는 errorOccurred() 신호를 보냅니다. error ()를 호출하여 마지막으로 발생한 오류 유형을 찾고 state()를 호출하여 현재 프로세스 상태를 찾을 수도 있습니다.

참고: QProcess는 VxWorks, iOS, tvOS 또는 watchOS에서 지원되지 않습니다.

실행 파일 찾기

실행할 프로그램은 setProgram()를 호출하거나 start() 호출에서 직접 설정할 수 있습니다. 프로그램 이름과 인수를 사용하여 start()를 호출하는 효과는 해당 함수 앞에 setProgram() 및 setArguments()를 호출한 다음 해당 매개 변수 없이 오버로드를 호출하는 것과 동일합니다.

QProcess는 프로그램 이름을 세 가지 방식 중 하나로 해석하는데, 이는 유닉스 셸과 Windows 명령 인터프리터가 자체 명령줄에서 작동하는 방식과 유사합니다:

  • 프로그램 이름이 절대 경로인 경우, 실행될 정확한 실행 파일이며 QProcess는 검색을 수행하지 않습니다.
  • 프로그램 이름이 둘 이상의 경로 구성 요소가 있는 상대 경로인 경우(즉, 슬래시가 하나 이상 포함된 경우), 해당 상대 경로가 검색되는 시작 디렉터리는 OS에 따라 다릅니다: Windows에서는 부모 프로세스의 현재 작업 디렉터리이고, Unix에서는 setWorkingDirectory()로 설정된 디렉터리입니다.
  • 프로그램 이름이 슬래시가 없는 일반 파일 이름인 경우, 동작은 운영 체제에 따라 달라집니다. Unix 시스템에서는 QProcess가 PATH 환경 변수를 검색하고, Windows에서는 OS에서 검색을 수행하며 PATH 환경 변수보다 먼저 부모 프로세스의 현재 디렉터리를 검색합니다(전체 목록은 CreateProcess 설명서를 참조하세요).

플랫폼 종속적인 동작이나 현재 애플리케이션이 실행되는 방식과 관련된 문제를 방지하려면 항상 실행할 실행 파일의 절대 경로를 전달하는 것이 좋습니다. 애플리케이션과 함께 제공되는 보조 바이너리의 경우 QCoreApplication::applicationDirPath()로 시작하는 이러한 경로를 구성할 수 있습니다. 마찬가지로 setWorkingDirectory()로 설정된 디렉터리를 기준으로 찾을 실행 파일을 명시적으로 실행하려면 경우에 따라 "./" 또는 "../"로 시작하는 프로그램 경로를 사용합니다.

Windows에서 ".exe" 접미사는 CreateProcess 문서에 설명된 경우를 제외한 대부분의 용도에 필요하지 않습니다. 또한 QProcess는 프로그램 이름에 대해 유닉스 스타일의 슬래시를 Windows 경로 백슬래시로 변환합니다. 이를 통해 위의 예제에서 볼 수 있듯이 QProcess를 사용하는 코드를 크로스 플랫폼 방식으로 작성할 수 있습니다.

QProcess는 cmd.exedir 명령이나 본 셸의 export 과 같은 유닉스 셸 또는 윈도우 명령 인터프리터 내장 함수의 직접 실행을 지원하지 않습니다. 유닉스에서는 많은 셸 내장 함수가 별도의 실행 파일로 제공되지만, 그 동작은 내장 함수로 구현된 것과 다를 수 있습니다. 이러한 명령을 실행하려면 적절한 옵션을 사용하여 인터프리터를 명시적으로 실행해야 합니다. Unix 시스템의 경우 두 개의 인수를 사용하여 "/bin/sh"를 실행합니다: "-c"와 실행할 명령줄이 포함된 문자열입니다. Windows의 경우 cmd.exe 명령줄을 구문 분석하는 방식이 비표준이므로 setNativeArguments()(예: "/c dir d:")을 사용하세요.

환경 변수

QProcess API는 자식 프로세스에 표시되는 환경 변수를 조작하는 메서드를 제공합니다. 기본적으로 자식 프로세스는 start() 함수가 호출될 때 존재하는 현재 프로세스 환경 변수의 복사본을 갖게 됩니다. 즉, 해당 호출 이전에 qputenv()를 사용하여 수행한 모든 수정 사항이 자식 프로세스의 환경에 반영됩니다. QProcess는 다른 스레드에서 qputenv()로 인한 경쟁 조건을 방지하려고 시도하지 않으므로 애플리케이션의 초기 시작 후에는 qputenv()를 사용하지 않는 것이 좋습니다.

특정 자식에 대한 환경은 QProcessEnvironment 클래스를 사용하는 processEnvironment() 및 setProcessEnvironment() 함수를 사용하여 수정할 수 있습니다. 기본적으로 processEnvironment()는 QProcessEnvironment::inheritsFromParent()가 참인 객체를 반환합니다. 부모로부터 상속되지 않는 환경을 설정하면 QProcess가 시작될 때 자식에 대해 정확히 해당 환경을 사용하게 됩니다.

일반적인 시나리오는 QProcessEnvironment::systemEnvironment()를 호출하여 현재 환경에서 시작한 다음 특정 변수를 추가, 변경 또는 제거하는 순서로 진행합니다. 그런 다음 결과 변수 목록은 setProcessEnvironment()를 사용하여 QProcess에 적용할 수 있습니다.

환경의 모든 변수를 제거하거나 QProcessEnvironment() 기본 생성자를 사용하여 빈 환경에서 시작할 수 있습니다. 현재 프로세스 환경에 설정되어 있고 자식 프로세스의 올바른 실행에 필요한 시스템 변수가 있을 수 있으므로 제어되고 시스템별 조건이 아닌 경우 이 방법은 바람직하지 않습니다.

Windows에서 QProcess는 현재 프로세스의 "PATH""SystemRoot" 환경 변수가 설정되지 않은 경우 이를 복사합니다. 완전히 설정 해제하는 것은 불가능하지만 빈 값으로 설정하는 것은 가능합니다. Windows에서 "PATH" 을 비워두면 자식 프로세스가 시작되지 않을 수 있습니다.

채널을 통한 통신

프로세스에는 미리 정의된 두 개의 출력 채널이 있습니다: 표준 출력 채널(stdout)은 일반 콘솔 출력을 제공하고, 표준 오류 채널(stderr)은 일반적으로 프로세스에서 출력되는 오류를 제공합니다. 이 채널은 두 개의 개별 데이터 스트림을 나타냅니다. setReadChannel ()를 호출하여 두 채널 사이를 전환할 수 있습니다. QProcess는 현재 읽기 채널에서 데이터를 사용할 수 있을 때 readyRead()를 출력합니다. 또한 새로운 표준 출력 데이터를 사용할 수 있으면 readyReadStandardOutput()를, 새로운 표준 오류 데이터를 사용할 수 있으면 readyReadStandardError()를 전송합니다. read (), readLine() 또는 getChar()를 호출하는 대신 readAllStandardOutput() 또는 readAllStandardError()를 호출하여 두 채널 중 하나에서 모든 데이터를 명시적으로 읽을 수 있습니다.

채널에 대한 용어가 오해의 소지가 있을 수 있습니다. 프로세스의 출력 채널은 QProcess의 읽기 채널에 해당하는 반면, 프로세스의 입력 채널은 QProcess의 쓰기 채널에 해당한다는 점에 유의하세요. 이는 QProcess를 사용하여 읽는 것은 프로세스의 출력이고, 쓰는 것은 프로세스의 입력이 되기 때문입니다.

QProcess는 두 출력 채널을 병합하여 실행 중인 프로세스의 표준 출력과 표준 오류 데이터가 모두 표준 출력 채널을 사용하도록 할 수 있습니다. 이 기능을 활성화하려면 프로세스를 시작하기 전에 setProcessChannelMode()를 MergedChannels 으로 호출하세요. 인자로 ForwardedChannels 을 전달하여 실행 중인 프로세스의 출력을 호출 중인 주 프로세스로 전달할 수도 있습니다. 출력 채널 중 하나만 전달할 수도 있습니다. 일반적으로 ForwardedErrorChannel 을 사용하지만 ForwardedOutputChannel 도 존재합니다. 일반적으로 GUI 애플리케이션에서는 채널 전달을 사용하지 않는 것이 좋으며, 대신 오류를 그래픽으로 표시해야 한다는 점에 유의하세요.

특정 프로세스가 작동하려면 특별한 환경 설정이 필요합니다. setProcessEnvironment ()를 호출하여 프로세스에 대한 환경 변수를 설정할 수 있습니다. 작업 디렉터리를 설정하려면 setWorkingDirectory()를 호출하세요. 기본적으로 프로세스는 호출 프로세스의 현재 작업 디렉터리에서 실행됩니다.

QProcess로 시작된 GUI 응용 프로그램에 속한 창의 위치와 화면 Z 순서는 기본 창 시스템에 의해 제어됩니다. Qt 5 응용 프로그램의 경우 -qwindowgeometry 명령줄 옵션을 사용하여 위치를 지정할 수 있으며, X11 응용 프로그램은 일반적으로 -geometry 명령줄 옵션을 사용할 수 있습니다.

동기 프로세스 API

QProcess는 특정 신호가 방출될 때까지 호출 스레드를 일시 중단하여 이벤트 루프 없이 사용할 수 있는 함수 집합을 제공합니다:

  • waitForStarted() 블록은 프로세스가 시작될 때까지
  • waitForReadyRead() 블록은 현재 읽기 채널에서 새 데이터를 읽을 수 있을 때까지 대기합니다.
  • waitForBytesWritten() 블록은 하나의 페이로드 데이터가 프로세스에 기록될 때까지 블록합니다.
  • waitForFinished() 블록은 프로세스가 완료될 때까지 블록합니다.

메인 스레드( QApplication::exec()를 호출하는 스레드)에서 이러한 함수를 호출하면 사용자 인터페이스가 멈출 수 있습니다.

다음 예제는 이벤트 루프 없이 gzip 을 실행하여 "Qt rocks!" 문자열을 압축합니다:

    QProcess gzip;
    gzip.start("gzip", QStringList() << "-c");
    if (!gzip.waitForStarted())
        return false;

    gzip.write("Qt rocks!");
    gzip.closeWriteChannel();

    if (!gzip.waitForFinished())
        return false;

    QByteArray result = gzip.readAll();

QBuffer, QFile, QTcpSocket참조하십시오 .

멤버 유형 문서

QProcess::CreateProcessArgumentModifier

참고: 이 typedef는 데스크톱 Windows에서만 사용할 수 있습니다.

Windows에서 QProcess 은 Win32 API 함수 CreateProcess 를 사용하여 하위 프로세스를 시작합니다. QProcess 은 플랫폼 세부 사항에 대한 걱정 없이 프로세스를 시작하는 편안한 방법을 제공하지만 경우에 따라 CreateProcess 에 전달되는 매개 변수를 미세 조정하는 것이 바람직합니다. 이는 CreateProcessArgumentModifier 함수를 정의하고 setCreateProcessArgumentsModifier 에 전달하면 됩니다.

CreateProcessArgumentModifier 함수는 CreateProcessArguments 구조체에 대한 포인터를 하나의 매개변수로 받습니다. 이 구조체의 멤버는 CreateProcessArgumentModifier 함수가 호출된 후 CreateProcess 에 전달됩니다.

다음 예는 CreateProcess 에 사용자 지정 플래그를 전달하는 방법을 보여줍니다. 콘솔 프로세스 A에서 콘솔 프로세스 B를 시작할 때 QProcess 은 기본적으로 프로세스 A의 콘솔 창을 프로세스 B에 재사용합니다. 이 예에서는 대신 사용자 지정 색 구성표가 있는 새 콘솔 창이 하위 프로세스 B에 대해 만들어집니다.

    QProcess process;
    process.setCreateProcessArgumentsModifier([] (QProcess::CreateProcessArguments *args)
    {
        args->flags |= CREATE_NEW_CONSOLE;
        args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES;
        args->startupInfo->dwFlags |= STARTF_USEFILLATTRIBUTE;
        args->startupInfo->dwFillAttribute = BACKGROUND_BLUE | FOREGROUND_RED
                                           | FOREGROUND_INTENSITY;
    });
    process.start("C:\\Windows\\System32\\cmd.exe", QStringList() << "/k" << "title" << "The Child Process");

QProcess::CreateProcessArgumentssetCreateProcessArgumentsModifier()도 참조하세요 .

enum QProcess::ExitStatus

이 열거형은 QProcess 의 다양한 종료 상태를 설명합니다.

Constant설명
QProcess::NormalExit0프로세스가 정상적으로 종료되었습니다.
QProcess::CrashExit1프로세스가 충돌했습니다.

exitStatus()도 참조하세요 .

enum QProcess::InputChannelMode

이 열거형은 QProcess 의 프로세스 입력 채널 모드를 설명합니다. 이 값 중 하나를 setInputChannelMode()에 전달하여 현재 쓰기 채널 모드를 설정합니다.

Constant설명
QProcess::ManagedInputChannel0QProcess 실행 중인 프로세스의 입력을 관리합니다. 기본 입력 채널 모드는 QProcess 입니다.
QProcess::ForwardedInputChannel1QProcess 메인 프로세스의 입력을 실행 중인 프로세스로 전달합니다. 자식 프로세스는 주 프로세스와 동일한 소스에서 표준 입력을 읽습니다. 주 프로세스는 자식 프로세스가 실행되는 동안 표준 입력을 읽으려고 시도해서는 안 됩니다.

setInputChannelMode()도 참조하세요 .

enum QProcess::ProcessChannel

이 열거형은 실행 중인 프로세스에서 사용하는 프로세스 채널을 설명합니다. 이 값 중 하나를 setReadChannel()에 전달하여 QProcess 의 현재 읽기 채널을 설정합니다.

상수설명
QProcess::StandardOutput0실행 중인 프로세스의 표준 출력(stdout)입니다.
QProcess::StandardError1실행 중인 프로세스의 표준 오류(stderr)입니다.

setReadChannel()도 참조하세요 .

enum QProcess::ProcessChannelMode

이 열거형은 QProcess 의 프로세스 출력 채널 모드를 설명합니다. 이 값 중 하나를 setProcessChannelMode()에 전달하여 현재 읽기 채널 모드를 설정합니다.

Constant설명
QProcess::SeparateChannels0QProcess 표준 출력과 표준 오류 데이터를 별도의 내부 버퍼에 보관하여 실행 중인 프로세스의 출력을 관리합니다. setReadChannel ()을 호출하여 QProcess 의 현재 읽기 채널을 선택할 수 있습니다. 이것이 QProcess 의 기본 채널 모드입니다.
QProcess::MergedChannels1QProcess 실행 중인 프로세스의 출력을 표준 출력 채널(stdout)로 병합합니다. 표준 오류 채널(stderr)은 데이터를 수신하지 않습니다. 실행 중인 프로세스의 표준 출력과 표준 오류 데이터가 인터리빙됩니다. 분리된 프로세스의 경우 실행 중인 프로세스의 병합된 출력이 주 프로세스로 전달됩니다.
QProcess::ForwardedChannels2QProcess 는 실행 중인 프로세스의 출력을 메인 프로세스로 전달합니다. 자식 프로세스가 표준 출력과 표준 오류에 쓰는 모든 내용은 주 프로세스의 표준 출력과 표준 오류에 기록됩니다.
QProcess::ForwardedErrorChannel4QProcess 는 실행 중인 프로세스의 표준 출력을 관리하지만 표준 오류를 주 프로세스로 전달합니다. 이는 표준 출력이 다른 프로세스나 파일로 리디렉션되고 표준 오류는 진단 목적으로 콘솔에 인쇄되는 일반적인 명령줄 도구의 필터 사용을 반영합니다. (이 값은 Qt 5.2에 도입되었습니다.)
QProcess::ForwardedOutputChannel3포워딩된 에러 채널을 보완합니다. (이 값은 Qt 5.2에 도입되었습니다.)

참고: Windows는 GUI 전용 응용 프로그램에서 상속된 콘솔로의 출력을 의도적으로 억제합니다. 이는 파일이나 파이프로 리디렉션된 출력에는 적용되지 않습니다. 그럼에도 불구하고 콘솔에서 GUI 전용 애플리케이션의 출력을 전달하려면 SeparateChannels를 사용하여 출력을 읽고 적절한 출력 채널에 쓰는 방식으로 직접 전달해야 합니다.

setProcessChannelMode()도 참조하세요 .

enum QProcess::ProcessError

이 열거형은 QProcess 에서 보고되는 다양한 유형의 오류를 설명합니다.

Constant설명
QProcess::FailedToStart0프로세스를 시작하지 못했습니다. 호출된 프로그램이 누락되었거나 프로그램을 호출할 수 있는 권한이나 리소스가 부족할 수 있습니다.
QProcess::Crashed1프로세스가 성공적으로 시작된 후 얼마 후 충돌했습니다.
QProcess::Timedout2마지막 waitFor...() 함수의 시간이 초과되었습니다. QProcess 상태는 변경되지 않았으며 waitFor...()를 다시 호출해 볼 수 있습니다.
QProcess::WriteError4프로세스에 쓰기를 시도하는 동안 오류가 발생했습니다. 예를 들어 프로세스가 실행 중이 아니거나 입력 채널을 닫았을 수 있습니다.
QProcess::ReadError3프로세스에서 읽기를 시도하는 동안 오류가 발생했습니다. 예를 들어 프로세스가 실행되고 있지 않을 수 있습니다.
QProcess::UnknownError5알 수 없는 오류가 발생했습니다. error ()의 기본 반환 값입니다.

error()도 참조하세요 .

enum QProcess::ProcessState

이 열거형은 QProcess 의 다양한 상태를 설명합니다.

Constant설명
QProcess::NotRunning0프로세스가 실행되고 있지 않습니다.
QProcess::Starting1프로세스가 시작 중이지만 프로그램이 아직 호출되지 않았습니다.
QProcess::Running2프로세스가 실행 중이며 읽기 및 쓰기 준비가 되었습니다.

state()도 참조하세요 .

[since 6.6] 열거형 클래스 Q프로세스::유닉스프로세스플래그
플래그 Q프로세스::유닉스프로세스플래그

이 플래그는 UnixProcessParametersflags 필드에서 사용할 수 있습니다.

상수설명
QProcess::UnixProcessFlag::CloseFileDescriptors0x0010lowestFileDescriptorToClose 에 정의된 임계값을 초과하는 모든 파일 기술자를 닫아 부모 프로세스에서 현재 열려 있는 기술자가 실수로 자식으로 유출되는 것을 방지합니다. stdin , stdout, stderr 파일 디스크립터는 닫히지 않습니다.
QProcess::UnixProcessFlag::CreateNewSession (since Qt 6.7)0x0040setsid(2) 을 호출하여 새 프로세스 세션을 시작합니다. 이렇게 하면 자식 프로세스가 현재 프로세스가 있는 세션보다 오래 지속될 수 있습니다. 이는 startDetached()가 프로세스를 분리하기 위해 수행하는 단계 중 하나이며 프로세스를 데몬화하는 단계 중 하나이기도 합니다.
QProcess::UnixProcessFlag::DisconnectControllingTerminal (since Qt 6.7)0x0080프로세스에 제어 터미널이 있는 경우 해당 터미널에서 연결을 끊도록 요청합니다. 제어 터미널이 없는 경우 아무 일도 일어나지 않습니다. 제어 터미널에 여전히 연결되어 있는 프로세스는 터미널이 닫히면 끊기(SIGHUP) 신호를 받거나 다른 터미널 제어 신호(SIGTSTP, SIGTTIN, SIGTTOU) 중 하나를 받을 수 있습니다. 일부 운영 체제에서는 프로세스가 세션 리더인 경우에만 제어 터미널과의 연결이 끊어질 수 있으므로 CreateNewSession 플래그가 필요할 수 있습니다. 이와 같이 프로세스를 데몬화하는 단계 중 하나입니다.
QProcess::UnixProcessFlag::IgnoreSigPipe0x0002ResetSignalHandlers 플래그가 설정되어 있더라도 항상 SIGPIPE 신호를 무시(SIG_IGN)로 설정합니다. 기본적으로 자식이 QProcess::closeReadChannel()로 해당 채널이 닫힌 후 표준 출력 또는 표준 오류에 쓰기를 시도하면 SIGPIPE 신호를 받고 즉시 종료되지만, 이 플래그를 사용하면 신호 없이 쓰기 작업이 실패하고 자식이 계속 실행될 수 있습니다.
QProcess::UnixProcessFlag::ResetIds (since Qt 6.7)0x0100현재 프로세스에 남아 있는 유효한 사용자 또는 그룹 ID를 모두 삭제합니다( setuid(2)setgid(2), QCoreApplication::setSetuidAllowed() 참조). 현재 프로세스가 setuid 또는 setgid이고 자식 프로세스가 상승된 권한을 보유하지 않기를 원하는 경우에 유용합니다.
QProcess::UnixProcessFlag::ResetSignalHandlers0x0001모든 Unix 신호 처리기를 기본 상태로 다시 설정합니다(즉, SIG_DFLsignal(2) 으로 전달). 이 플래그는 무시된(SIG_IGN) 신호가 자식 프로세스의 동작에 영향을 미치지 않도록 하는 데 유용합니다.
QProcess::UnixProcessFlag::UseVFork0x0020QProcess 에서 vfork(2) 을 사용하여 하위 프로세스를 시작하도록 요청합니다. 이 플래그를 사용하면 setChildProcessModifier()로 설정된 콜백 함수가 vfork(2) 의 자식 쪽에서 실행해도 안전하다는 것을 나타냅니다. 즉, 콜백이 직접 또는 호출하는 함수를 통해 비로컬 변수를 수정하거나 부모 프로세스와 통신을 시도하지 않습니다. QProcess 이 실제로 vfork(2) 을 사용하는지, vfork(2) 이 표준 fork(2) 과 다른지는 구현에 따라 정의됩니다.

이 열거형은 Qt 6.6에 도입되었습니다.

UnixProcessFlags 형은 QFlags<UnixProcessFlag>에 대한 typedef입니다. UnixProcessFlag 값의 OR 조합을 저장합니다.

setUnixProcessParameters() 및 unixProcessParameters()도 참조하십시오 .

멤버 함수 문서

[explicit] QProcess::QProcess(QObject *parent = nullptr)

주어진 parent 으로 QProcess 객체를 생성합니다.

[virtual noexcept] QProcess::~QProcess()

QProcess 객체를 파괴합니다(즉, 프로세스를 종료합니다).

이 함수는 프로세스가 종료될 때까지 반환되지 않습니다.

QStringList QProcess::arguments() const

프로세스가 마지막으로 시작된 명령줄 인수를 반환합니다.

setArguments() 및 start()도 참조하세요 .

[override virtual] qint64 QProcess::bytesToWrite() const

재구현합니다: QIODevice::bytesToWrite() const.

[since 6.0] std::function<void ()> QProcess::childProcessModifier() const

setChildProcessModifier()를 호출하여 이전에 설정한 수정자 함수를 반환합니다.

참고: 이 함수는 유닉스 플랫폼에서만 사용할 수 있습니다.

이 함수는 Qt 6.0에 도입되었습니다.

setChildProcessModifier() 및 unixProcessParameters()도 참조하세요 .

[override virtual] void QProcess::close()

다시 구현합니다: QIODevice::close().

프로세스와의 모든 통신을 닫고 프로세스를 종료합니다. 이 함수를 호출하면 QProcess 더 이상 readyRead()을 전송하지 않으며 데이터를 더 이상 읽거나 쓸 수 없습니다.

void QProcess::closeReadChannel(QProcess::ProcessChannel channel)

읽기 채널을 닫습니다 channel. 이 함수를 호출하면 QProcess 은 더 이상 채널에서 데이터를 수신하지 않습니다. 이미 수신된 모든 데이터는 계속 읽을 수 있습니다.

프로세스의 출력에 관심이 없는 경우 메모리를 절약하려면 이 함수를 호출하세요.

closeWriteChannel() 및 setReadChannel()도 참조하세요 .

void QProcess::closeWriteChannel()

QProcess 의 쓰기 채널이 닫히도록 예약합니다. 프로세스에 모든 데이터가 쓰여지면 채널이 닫힙니다. 이 함수를 호출한 후에는 프로세스에 쓰려는 모든 시도가 실패합니다.

쓰기 채널을 닫는 것은 채널이 닫힐 때까지 입력 데이터를 읽는 프로그램에 필요합니다. 예를 들어 "more" 프로그램은 Unix와 Windows 모두에서 콘솔에 텍스트 데이터를 표시하는 데 사용됩니다. 하지만 QProcess 의 쓰기 채널이 닫힐 때까지 텍스트 데이터가 표시되지 않습니다. 예시:

QProcess more;
more.start("more");
more.write("Text to display");
more.closeWriteChannel();
// QProcess will emit readyRead() once "more" starts printing

start()가 호출되면 쓰기 채널이 암시적으로 열립니다.

closeReadChannel()도 참조하세요 .

QProcess::CreateProcessArgumentModifier QProcess::createProcessArgumentsModifier() const

이전에 설정한 CreateProcess 수정자 함수를 반환합니다.

참고: 이 함수는 Windows 플랫폼에서만 사용할 수 있습니다.

setCreateProcessArgumentsModifier() 및 QProcess::CreateProcessArgumentModifier참조하세요 .

QProcess::ProcessError QProcess::error() const

마지막으로 발생한 오류 유형을 반환합니다.

state()도 참조하세요 .

[signal] void QProcess::errorOccurred(QProcess::ProcessError error)

이 신호는 프로세스에 오류가 발생할 때 발생합니다. 지정된 error 은 발생한 오류의 유형을 설명합니다.

[static] int QProcess::execute(const QString &program, const QStringList &arguments = {})

새 프로세스에서 arguments 인수를 사용하여 program 프로그램을 시작하고 완료될 때까지 기다린 다음 프로세스의 종료 코드를 반환합니다. 새 프로세스가 콘솔에 쓰는 모든 데이터는 호출 프로세스로 전달됩니다.

환경 및 작업 디렉터리는 호출 프로세스에서 상속됩니다.

인수 처리는 각각의 start() 오버로드와 동일합니다.

프로세스를 시작할 수 없으면 -2가 반환됩니다. 프로세스가 충돌하면 -1이 반환됩니다. 그렇지 않으면 프로세스의 종료 코드가 반환됩니다.

start()도 참조하세요 .

int QProcess::exitCode() const

마지막으로 완료된 프로세스의 종료 코드를 반환합니다.

exitStatus()가 NormalExit 을 반환하지 않는 한 이 값은 유효하지 않습니다.

QProcess::ExitStatus QProcess::exitStatus() const

마지막으로 종료된 프로세스의 종료 상태를 반환합니다.

Windows에서 프로세스가 다른 애플리케이션에서 TerminateProcess()로 종료된 경우에도 종료 코드가 0보다 작지 않으면 이 함수는 NormalExit 을 반환합니다.

[noexcept, since 6.7] void QProcess::failChildProcessModifier(const char *description, int error = 0)

이 함수는 setChildProcessModifier()와 함께 설정된 수정자 내에서 오류 조건이 발생했음을 나타내는 데 사용할 수 있습니다. 수정자가 이 함수를 호출하면 QProcess 은 부모 프로세스에서 QProcess::FailedToStart 코드와 함께 errorOccurred()을 내보냅니다. description 는 문제를 진단하는 데 도움이 되도록 errorString()에 일부 정보를 포함하는 데 사용할 수 있으며, 일반적으로 C 라이브러리 함수 perror() 와 유사하게 실패한 호출의 이름입니다. 또한 error 매개 변수는 텍스트 형식이 포함된 <errno.h> 오류 코드일 수도 있습니다.

예를 들어 자식 수정자는 이러한 방식으로 자식 프로세스에 대한 추가 파일 설명자를 준비할 수 있습니다:

process.setChildProcessModifier([fd, &process]() {
    if (dup2(fd, TargetFileDescriptor) < 0)
        process.failChildProcessModifier(errno, "aux comm channel");
});
process.start();

여기서 fd 은 현재 부모 프로세스에서 열려 있는 파일 설명자입니다. dup2() 시스템 호출에서 EBADF 조건이 발생한 경우 errorString() 프로세스는 "하위 프로세스 수정자가 오류를 보고했습니다: 보조 통신 채널: 잘못된 파일 설명자".

이 함수는 호출자에게 반환되지 않습니다. 하위 수정자를 제외한 다른 곳에서 올바른 QProcess 객체와 함께 사용하는 것은 정의되지 않은 동작입니다.

참고: 구현에서는 description 매개변수의 길이를 약 500자로 제한하고 있습니다. 여기에는 error 코드의 텍스트는 포함되지 않습니다.

이 함수는 Qt 6.7에 도입되었습니다.

setChildProcessModifier() 및 setUnixProcessParameters()도 참조하세요 .

[signal] void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus = NormalExit)

exitCode 은 프로세스의 종료 코드(일반 종료에만 유효)이고 exitStatus 은 종료 상태입니다. 프로세스가 종료된 후에도 QProcess 의 버퍼는 그대로 유지됩니다. 프로세스가 완료되기 전에 썼을 수 있는 모든 데이터를 계속 읽을 수 있습니다.

exitStatus()도 참조하세요 .

QProcess::InputChannelMode QProcess::inputChannelMode() const

QProcess 표준 입력 채널의 채널 모드를 반환합니다.

setInputChannelMode() 및 InputChannelMode도 참조하세요 .

[override virtual] bool QProcess::isSequential() const

재구현합니다: QIODevice::isSequential() const.

[slot] void QProcess::kill()

현재 프로세스를 죽여 즉시 종료합니다.

Windows에서는 kill()이 TerminateProcess를 사용하고, Unix 및 macOS에서는 SIGKILL 신호가 프로세스에 전송됩니다.

terminate()도 참조하세요 .

QString QProcess::nativeArguments() const

프로그램에 대한 추가 기본 명령줄 인수를 반환합니다.

참고: 이 함수는 Windows 플랫폼에서만 사용할 수 있습니다.

setNativeArguments()도 참조하세요 .

[static] QString QProcess::nullDevice()

운영 체제의 널 장치입니다.

반환된 파일 경로는 기본 디렉토리 구분 기호를 사용합니다.

QProcess::setStandardInputFile(), QProcess::setStandardOutputFile() 및 QProcess::setStandardErrorFile()도 참조하세요 .

[override virtual] bool QProcess::open(QIODeviceBase::OpenMode mode = ReadWrite)

다시 구현합니다: QIODevice::open(QIODeviceBase::OpenMode 모드).

setArguments()에 의해 설정된 인수를 사용하여 setProgram()에 의해 설정된 프로그램을 시작합니다. OpenMode는 mode 로 설정됩니다.

이 메서드는 start()의 별칭이며 QIODevice 에 정의된 인터페이스를 완전히 구현하기 위해서만 존재합니다.

프로그램이 시작되면 true 을 반환합니다.

start(), setProgram() 및 setArguments()도 참조하세요 .

QProcess::ProcessChannelMode QProcess::processChannelMode() const

QProcess 표준 출력 및 표준 오류 채널의 채널 모드를 반환합니다.

setProcessChannelMode(), ProcessChannelMode, setReadChannel()도 참조하세요 .

QProcessEnvironment QProcess::processEnvironment() const

QProcess 이 자식 프로세스에 전달할 환경을 반환합니다. setProcessEnvironment ()를 사용하여 설정된 환경이 없는 경우 이 메서드는 부모로부터 상속될 환경을 나타내는 객체를 반환합니다.

setProcessEnvironment(), QProcessEnvironment::inheritsFromParent() 및 Environment variables참조하세요 .

qint64 QProcess::processId() const

실행 중인 프로세스의 기본 프로세스 식별자가 있으면 반환합니다(사용 가능한 경우). 현재 실행 중인 프로세스가 없으면 0 가 반환됩니다.

QString QProcess::program() const

프로세스가 마지막으로 시작된 프로그램을 반환합니다.

setProgram() 및 start()도 참조하세요 .

QByteArray QProcess::readAllStandardError()

현재 읽기 채널에 관계없이 이 함수는 프로세스의 표준 오류에서 사용 가능한 모든 데이터를 QByteArray 로 반환합니다.

readyReadStandardError(), readAllStandardOutput(), readChannel() 및 setReadChannel()도 참조하세요 .

QByteArray QProcess::readAllStandardOutput()

현재 읽기 채널에 관계없이 이 함수는 프로세스의 표준 출력에서 사용 가능한 모든 데이터를 QByteArray 로 반환합니다.

readyReadStandardOutput(), readAllStandardError(), readChannel() 및 setReadChannel()도 참조하세요 .

QProcess::ProcessChannel QProcess::readChannel() const

QProcess 의 현재 읽기 채널을 반환합니다.

setReadChannel()도 참조하세요 .

[override virtual protected] qint64 QProcess::readData(char *data, qint64 maxlen)

다시 구현합니다: QIODevice::readData(문자 *데이터, qint64 maxSize).

[private signal] void QProcess::readyReadStandardError()

이 신호는 프로세스가 표준 오류 채널(stderr)을 통해 새 데이터를 사용할 수 있게 되었을 때 발생합니다. 현재 read channel 에 관계없이 전송됩니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만 사용자가 방출할 수는 없습니다.

readAllStandardError() 및 readChannel()도 참조하세요 .

[private signal] void QProcess::readyReadStandardOutput()

이 신호는 프로세스가 표준 출력 채널(stdout)을 통해 새 데이터를 사용할 수 있게 되었을 때 발생합니다. 현재 read channel 에 관계없이 전송됩니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만 사용자가 방출할 수는 없습니다.

readAllStandardOutput() 및 readChannel()도 참조하세요 .

void QProcess::setArguments(const QStringList &arguments)

프로세스를 시작할 때 호출된 프로그램에 전달할 arguments 을 설정합니다. 이 함수는 start() 전에 호출해야 합니다.

start(), setProgram() 및 arguments()도 참조하세요 .

[since 6.0] void QProcess::setChildProcessModifier(const std::function<void ()> &modifier)

자식 프로세스에 대해 modifier 함수를 설정합니다(Unix 시스템(macOS 포함, Windows의 경우 setCreateProcessArgumentsModifier() 참조). modifier 인수가 포함된 함수는 fork() 또는 vfork() 이 완료되고 QProcess 이 하위 프로세스에 대한 표준 파일 설명자를 설정한 후 하위 프로세스에서 호출되지만 start() 내에서 execve() 이전에는 호출되지 않습니다.

다음은 권한 없이 실행되도록 자식 프로세스를 설정하는 예제입니다:

void runSandboxed(const QString &name, const QStringList &arguments)
{
    QProcess proc;
    proc.setChildProcessModifier([] {
        // Drop all privileges in the child process, and enter
        // a chroot jail.
        ::setgroups(0, nullptr);
        ::chroot("/run/safedir");
        ::chdir("/");
        ::setgid(safeGid);
        ::setuid(safeUid);
        ::umask(077);
    });
    proc.start(name, arguments);
    proc.waitForFinished();
}

수정자 함수에 장애 조건이 발생하면 failChildProcessModifier()를 사용하여 QProcess 호출자에게 상황을 보고할 수 있습니다. 또는 _exit() 또는 abort() 과 같은 다른 방법을 사용하여 프로세스를 중지할 수도 있습니다.

모든 불필요한 파일 설명자를 닫거나 제어 TTY와의 연결을 끊는 등 하위 프로세스의 특정 속성은 실패를 감지하고 FailedToStart 상태를 보고할 수 있는 setUnixProcessParameters()를 사용하여 더 쉽게 달성할 수 있습니다. 이 수정자는 추가 파일 설명자를 설정하는 등 자식 프로세스의 일반적이지 않은 특정 속성을 변경하는 데 유용합니다. 자식 프로세스 수정자와 유닉스 프로세스 매개변수가 모두 설정되어 있으면 이러한 매개변수가 적용되기 전에 수정자가 실행됩니다.

참고: 멀티스레드 애플리케이션에서 이 함수는 다른 스레드에서 사용 중인 뮤텍스를 잠글 수 있는 함수를 호출하지 않도록 주의해야 합니다(일반적으로 POSIX에서 "비동기 신호 안전"으로 정의한 함수만 사용하는 것이 좋습니다). qDebug ()를 포함한 대부분의 Qt API는 이 콜백 내에서 안전하지 않으며 교착 상태가 발생할 수 있습니다.

참고: setUnixProcessParameters()를 통해 UnixProcessParameters::UseVFork 플래그가 설정된 경우 QProcessvfork() 시맨틱을 사용하여 자식 프로세스를 시작할 수 있으므로 이 함수는 더욱 엄격한 제약 조건을 따라야 합니다. 첫째, 여전히 부모 프로세스와 메모리를 공유하고 있으므로 데이터 경합을 피하기 위해 로컬이 아닌 변수에 쓰지 않아야 하며, 변수를 읽을 때 적절한 순서 시맨틱을 따라야 합니다. 둘째, 더 많은 라이브러리 함수가 오작동할 수 있으므로 이 함수는 read(), write(), setsid(), nice() 등과 같은 저수준 시스템 호출만 사용해야 합니다.

이 함수는 Qt 6.0에 도입되었습니다.

childProcessModifier(), failChildProcessModifier() 및 setUnixProcessParameters()도 참조하십시오 .

void QProcess::setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier)

CreateProcess Win32 API 호출에 대해 modifier 을 설정합니다. 이전에 설정한 것을 제거하려면 QProcess::CreateProcessArgumentModifier() 을 전달합니다.

참고: 이 함수는 Windows 플랫폼에서만 사용할 수 있으며 C++11이 필요합니다.

createProcessArgumentsModifier(), QProcess::CreateProcessArgumentModifier, setChildProcessModifier()도 참조하세요 .

void QProcess::setInputChannelMode(QProcess::InputChannelMode mode)

QProcess 표준 입력 채널의 채널 모드를 지정된 mode 으로 설정합니다. 이 모드는 다음에 start()가 호출될 때 사용됩니다.

inputChannelMode() 및 InputChannelMode도 참조하세요 .

void QProcess::setNativeArguments(const QString &arguments)

이 함수는 과부하된 함수입니다.

프로그램에 대한 추가 기본 명령줄 arguments 을 설정합니다.

arguments 명령줄을 하위 프로세스에 전달하기 위한 시스템 API가 기본적으로 단일 문자열을 사용하는 운영 체제에서는 QProcess 의 이식 가능한 목록 기반 API를 통해 전달할 수 없는 명령줄을 구상할 수 있습니다. 이러한 경우 이 함수를 사용하여 일반적인 인수 목록에서 구성된 문자열에 공백을 구분하는 문자열을 추가하는 문자열을 설정해야 합니다.

참고: 이 함수는 Windows 플랫폼에서만 사용할 수 있습니다.

nativeArguments()도 참조하세요 .

void QProcess::setProcessChannelMode(QProcess::ProcessChannelMode mode)

QProcess 표준 출력 및 표준 오류 채널의 채널 모드를 지정된 mode 으로 설정합니다. 이 모드는 다음에 start()를 호출할 때 사용됩니다. 예를 들어

QProcess builder; builder.setProcessChannelMode(QProcess::MergedChannels); builder.start("make", QStringList()<< "-j2");if (!builder.waitForFinished())    qDebug() << "Make failed:" << builder.errorString();
else    qDebug() << "Make output:" << builder.readAll();

processChannelMode(), ProcessChannelMode, setReadChannel()도 참조하세요 .

void QProcess::setProcessEnvironment(const QProcessEnvironment &environment)

QProcess 이 하위 프로세스에 전달할 environment 을 설정합니다.

예를 들어 다음 코드는 환경 변수 TMPDIR 를 추가합니다:

QProcess process;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable
process.setProcessEnvironment(env);
process.start("myapp");

Windows에서 환경 변수 이름은 대소문자를 구분하지 않는다는 점에 유의하세요.

processEnvironment(), QProcessEnvironment::systemEnvironment() 및 Environment variables참조하세요 .

[protected] void QProcess::setProcessState(QProcess::ProcessState state)

QProcess 의 현재 상태를 지정된 state 으로 설정합니다.

state()도 참조하세요 .

void QProcess::setProgram(const QString &program)

프로세스를 시작할 때 사용할 program 함수를 설정합니다. 이 함수는 start() 앞에 호출해야 합니다.

program 이 절대 경로인 경우 실행될 정확한 실행 파일을 지정합니다. 상대 경로는 PATH 환경 변수를 검색하는 등 플랫폼별 방식으로 확인됩니다(자세한 내용은 Finding the Executable 참조).

start(), setArguments(), program() 및 QStandardPaths::findExecutable()도 참조하세요 .

void QProcess::setReadChannel(QProcess::ProcessChannel channel)

QProcess 의 현재 읽기 채널을 지정된 channel 으로 설정합니다. 현재 입력 채널은 read(), readAll(), readLine() 및 getChar() 함수에서 사용됩니다. 또한 QProcess 을 트리거하여 readyRead() 을 방출할 채널도 결정합니다.

readChannel()도 참조하세요 .

void QProcess::setStandardErrorFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)

프로세스의 표준 오류를 fileName 파일로 리디렉션합니다. 리디렉션이 완료되면 표준 오류 읽기 채널이 닫힙니다. read()를 사용하여 이 채널에서 읽으면 readAllStandardError()와 마찬가지로 항상 실패합니다. mode 가 Append인 경우 파일이 추가되고, 그렇지 않으면 잘립니다.

파일 열기 방법에 대한 자세한 내용은 setStandardOutputFile()를 참조하세요.

참고: setProcessChannelMode()가 QProcess::MergedChannels 인수를 사용하여 호출된 경우 이 함수는 효과가 없습니다.

setStandardInputFile(), setStandardOutputFile() 및 setStandardOutputProcess()도 참조하세요 .

void QProcess::setStandardInputFile(const QString &fileName)

프로세스의 표준 입력을 fileName 으로 표시된 파일로 리디렉션합니다. 입력 리디렉션이 적용되면 QProcess 객체는 읽기 전용 모드가 됩니다( write() 호출 시 오류 발생).

프로세스가 EOF를 바로 읽도록 하려면 여기에 nullDevice()를 전달하세요. 이는 프로세스를 시작하기 전에 설정할 수 있으므로 데이터를 쓰기 전에 closeWriteChannel()를 사용하는 것보다 더 깔끔합니다.

start() 호출 시 fileName 파일이 존재하지 않거나 읽을 수 없는 경우 프로세스 시작이 실패합니다.

프로세스가 시작된 후에 setStandardInputFile()을 호출해도 아무런 효과가 없습니다.

setStandardOutputFile(), setStandardErrorFile() 및 setStandardOutputProcess()도 참조하세요 .

void QProcess::setStandardOutputFile(const QString &fileName, QIODeviceBase::OpenMode mode = Truncate)

프로세스의 표준 출력을 fileName 파일로 리디렉션합니다. 리디렉션이 적용되면 표준 출력 읽기 채널이 닫힙니다. read()를 사용하여 이 채널에서 읽으면 readAllStandardOutput()와 마찬가지로 항상 실패합니다.

프로세스의 모든 표준 출력을 삭제하려면 여기에 nullDevice()를 전달하세요. 이렇게 하면 QProcess 버퍼가 채워지지 않으므로 단순히 표준 출력을 읽지 않는 것보다 더 효율적입니다.

start()이 호출되는 시점에 fileName 파일이 존재하지 않으면 파일이 생성됩니다. 파일을 만들 수 없으면 시작이 실패합니다.

파일이 존재하고 modeQIODeviceBase::Truncate 인 경우 파일이 잘립니다. 그렇지 않은 경우( modeQIODeviceBase::Append 인 경우) 파일이 추가됩니다.

프로세스가 시작된 후 setStandardOutputFile()을 호출해도 아무런 효과가 없습니다.

fileName 이 빈 문자열이면 표준 출력 리디렉션을 중지합니다. 이는 리디렉션 후 표준 출력을 복원할 때 유용합니다.

setStandardInputFile(), setStandardErrorFile() 및 setStandardOutputProcess()도 참조하세요 .

void QProcess::setStandardOutputProcess(QProcess *destination)

이 프로세스의 표준 출력 스트림을 destination 프로세스의 표준 입력으로 파이프합니다.

다음 셸 명령을 사용합니다:

command1 | command2

다음 코드와 함께 QProcess 으로 수행할 수 있습니다:

QProcess process1;
QProcess process2;

process1.setStandardOutputProcess(&process2);

process1.start("command1");
process2.start("command2");

[since 6.6] void QProcess::setUnixProcessParameters(const QProcess::UnixProcessParameters &params)

유닉스 시스템에서 하위 프로세스에 대한 추가 설정 및 매개변수를 params 로 설정합니다. 이 함수는 대상 실행 파일을 시작하기 전에 QProcess 에 자식 프로세스를 수정하도록 요청하는 데 사용할 수 있습니다.

이 함수는 모든 불필요한 파일 설명자를 닫거나, 자식의 좋은 수준을 변경하거나, 제어하는 TTY와의 연결을 끊는 등 자식 프로세스의 특정 속성을 변경하는 데 사용할 수 있습니다. 자식 프로세스를 보다 세밀하게 제어하거나 다른 방법으로 수정하려면 setChildProcessModifier() 함수를 사용합니다. 자식 프로세스 수정자와 유닉스 프로세스 매개변수가 모두 설정되어 있으면 이러한 매개변수가 적용되기 전에 수정자가 실행됩니다.

참고: 이 함수는 Unix 플랫폼에서만 사용할 수 있습니다.

이 함수는 Qt 6.6에 도입되었습니다.

unixProcessParameters() 및 setChildProcessModifier()도 참조하세요 .

[since 6.6] void QProcess::setUnixProcessParameters(QProcess::UnixProcessFlags flagsOnly)

이것은 오버로드된 함수입니다.

Unix 시스템에서 하위 프로세스에 대한 추가 설정을 flagsOnly 로 설정합니다. 이는 flags 필드만 설정한 과부하와 동일합니다.

참고: 이 함수는 유닉스 플랫폼에서만 사용할 수 있습니다.

이 함수는 Qt 6.6에 도입되었습니다.

unixProcessParameters() 및 setChildProcessModifier()도 참조하세요 .

void QProcess::setWorkingDirectory(const QString &dir)

작업 디렉터리를 dir 로 설정합니다. QProcess 은 이 디렉터리에서 프로세스를 시작합니다. 기본 동작은 호출하는 프로세스의 작업 디렉터리에서 프로세스를 시작하는 것입니다.

workingDirectory() 및 start()도 참조하세요 .

[static] QStringList QProcess::splitCommand(QStringView command)

command 문자열을 토큰 목록으로 분할하고 목록을 반환합니다.

공백이 있는 토큰은 큰따옴표로 묶을 수 있으며, 연속된 큰따옴표 3개는 따옴표 문자 자체를 나타냅니다.

void QProcess::start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite)

주어진 program 을 새 프로세스에서 시작하여 arguments 에 명령줄 인수를 전달합니다. QProcess 이 실행할 실행 파일을 검색하는 방법에 대한 자세한 내용은 setProgram()를 참조하세요. OpenMode는 mode 로 설정됩니다. 인수의 추가 분할은 수행되지 않습니다.

QProcess 객체는 즉시 시작 상태가 됩니다. 프로세스가 성공적으로 시작되면 QProcess started (), 그렇지 않으면 errorOccurred()를 반환합니다. 하위 프로세스를 동기적으로 시작할 수 있는 플랫폼(특히 Windows)에서는 이 함수가 반환되기 전에 이러한 신호가 발생하고 QProcess 객체가 각각 QProcess::Running 또는 QProcess::NotRunning 상태로 전환됩니다. 다른 팔폼에서는 started() 및 errorOccurred() 신호가 지연됩니다.

waitForStarted()를 호출하여 프로세스가 시작되었는지(또는 시작에 실패했는지) 그리고 해당 신호가 전송되었는지 확인하세요. 프로세스 시작 상태를 이미 알고 있는 경우에도 해당 함수를 호출해도 신호가 다시 전송되지 않으므로 안전합니다.

Windows: 인수가 따옴표로 묶여 CommandLineToArgvW() Windows 함수와 호환되는 명령줄로 결합됩니다. 다른 명령줄 인용 요구 사항이 있는 프로그램의 경우에는 setNativeArguments()를 사용해야 합니다. CommandLineToArgvW() 규칙을 따르지 않는 대표적인 프로그램으로는 cmd.exe와 결과적으로 모든 배치 스크립트가 있습니다.

QProcess 개체가 이미 프로세스를 실행 중인 경우 콘솔에 경고가 표시될 수 있으며 기존 프로세스는 영향을 받지 않고 계속 실행됩니다.

참고: 하위 프로세스가 성공적으로 시작되었다는 것은 운영 체제에서 프로세스를 성공적으로 만들고 프로세스 ID 등 모든 프로세스에 있는 리소스를 할당했다는 의미일 뿐입니다. 하위 프로세스는 매우 일찍 충돌하거나 실패하여 예상한 출력을 생성하지 못할 수 있습니다. 대부분의 운영 체제에서는 동적 연결 오류가 발생할 수 있습니다.

processId(), started(), waitForStarted() 및 setNativeArguments()도 참조하세요 .

void QProcess::start(QIODeviceBase::OpenMode mode = ReadWrite)

이 함수는 오버로드된 함수입니다.

setArguments()로 설정된 인수를 사용하여 setProgram()로 설정된 프로그램을 시작합니다. OpenMode는 mode 로 설정됩니다.

open(), setProgram() 및 setArguments()도 참조하세요 .

[since 6.0] void QProcess::startCommand(const QString &command, QIODeviceBase::OpenMode mode = ReadWrite)

새 프로세스에서 command 명령을 시작합니다. OpenMode는 mode 로 설정됩니다.

command 는 프로그램 이름과 인수가 모두 포함된 단일 텍스트 문자열입니다. 인수는 하나 이상의 공백으로 구분됩니다. 예를 들어

QProcess process;
process.startCommand("del /s *.txt");
// same as process.start("del", QStringList() << "/s" << "*.txt");
...

새 프로세스에 올바르게 제공하려면 공백이 포함된 인수를 따옴표로 묶어야 합니다. 예

QProcess process;
process.startCommand("dir \"My Documents\"");

command 문자열의 리터럴 따옴표는 큰따옴표 세 개로 표시됩니다. 예: 다음과 같습니다:

QProcess process;
process.startCommand("dir \"Epic 12\"\"\" Singles\"");

command 문자열이 분할되고 따옴표가 제거된 후 이 함수는 start()처럼 작동합니다.

명령줄 인수를 하위 프로세스에 전달하기 위한 시스템 API가 기본적으로 단일 문자열을 사용하는 운영 체제(Windows)에서는 QProcess 의 이식 가능한 목록 기반 API를 통해 전달할 수 없는 명령줄을 생각할 수 있습니다. 이런 드문 경우에는 이 함수 대신 setProgram() 및 setNativeArguments()를 사용해야 합니다.

이 함수는 Qt 6.0에 도입되었습니다.

splitCommand() 및 start()도 참조하세요 .

bool QProcess::startDetached(qint64 *pid = nullptr)

setProgram()에서 설정한 프로그램을 setArguments()에서 설정한 인수를 사용하여 새 프로세스에서 시작하고 분리합니다. 성공하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다. 호출하는 프로세스가 종료되면 분리된 프로세스는 영향을 받지 않고 계속 실행됩니다.

Unix: 시작된 프로세스는 자체 세션에서 실행되며 데몬처럼 작동합니다.

프로세스는 setWorkingDirectory()에 의해 설정된 디렉토리에서 시작됩니다. workingDirectory ()가 비어 있으면 호출하는 프로세스에서 작업 디렉터리가 상속됩니다.

함수가 성공하면 *pid 이 시작된 프로세스의 프로세스 식별자로 설정되고, 그렇지 않으면 -1로 설정됩니다. 자식 프로세스가 예고 없이 종료되어 PID가 유효하지 않게 될 수 있습니다. 또한 하위 프로세스가 종료된 후 완전히 다른 프로세스에서 동일한 PID를 재활용하여 사용할 수도 있습니다. 특히 운영 체제에서 프로세스를 강제로 종료하려는 경우 사용자 코드는 이 변수를 사용할 때 주의해야 합니다.

startDetached()는 다음 속성 설정자만 지원합니다:

QProcess 객체의 다른 모든 속성은 무시됩니다.

참고: 호출된 프로세스는 호출 프로세스의 콘솔 창을 상속합니다. 콘솔 출력을 억제하려면 표준/오류 출력을 QProcess::nullDevice()로 리디렉션하세요.

start() 및 startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, qint64 *pid)도 참조하세요 .

[static] bool QProcess::startDetached(const QString &program, const QStringList &arguments = {}, const QString &workingDirectory = QString(), qint64 *pid = nullptr)

이 함수는 startDetached()를 오버로드합니다.

새 프로세스에서 arguments 인수를 사용하여 program 프로그램을 시작하고 이 프로그램에서 분리합니다. 성공하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다. 호출하는 프로세스가 종료되면 분리된 프로세스는 영향을 받지 않고 계속 실행됩니다.

인자 처리는 각각의 start() 오버로드와 동일합니다.

프로세스는 workingDirectory 디렉토리에서 시작됩니다. workingDirectory 이 비어 있으면 작업 디렉터리가 호출 프로세스에서 상속됩니다.

함수가 성공하면 *pid 이 시작된 프로세스의 프로세스 식별자로 설정됩니다.

start()도 참조하세요 .

[private signal] void QProcess::started()

이 신호는 프로세스가 시작되면 QProcess 에서 전송되며 state()은 Running 을 반환합니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만 사용자가 방출할 수는 없습니다.

QProcess::ProcessState QProcess::state() const

프로세스의 현재 상태를 반환합니다.

stateChanged() 및 error()도 참조하세요 .

[private signal] void QProcess::stateChanged(QProcess::ProcessState newState)

이 신호는 QProcess 상태가 변경될 때마다 전송됩니다. newState 인수는 QProcess 상태가 변경된 상태입니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만 사용자가 발신할 수는 없습니다.

[static] QStringList QProcess::systemEnvironment()

호출하는 프로세스의 환경을 키=값 쌍의 목록으로 반환합니다. 예제:

QStringList environment = QProcess::systemEnvironment();
// environment = {"PATH=/usr/bin:/usr/local/bin",
//                "USER=greg", "HOME=/home/greg"}

이 함수는 시스템 환경을 캐시하지 않습니다. 따라서 setenv 또는 putenv 같은 저수준 C 라이브러리 함수가 호출된 경우 업데이트된 버전의 환경을 가져올 수 있습니다.

그러나 이 함수를 반복적으로 호출하면 환경 변수 목록이 다시 생성되므로 간단한 작업이 아니라는 점에 유의하세요.

참고: 새 코드의 경우 QProcessEnvironment::systemEnvironment()를 사용하는 것이 좋습니다.

QProcessEnvironment::systemEnvironment() 및 setProcessEnvironment()도 참조하세요 .

[slot] void QProcess::terminate()

프로세스 종료를 시도합니다.

이 함수를 호출해도 프로세스가 종료되지 않을 수 있습니다(사용자에게 저장되지 않은 파일 등을 확인할 기회가 주어집니다).

Windows에서 terminate()는 프로세스의 모든 최상위 창에 WM_CLOSE 메시지를 게시한 다음 프로세스 자체의 메인 스레드에 메시지를 게시합니다. Unix 및 macOS에서는 SIGTERM 신호가 전송됩니다.

이벤트 루프를 실행하지 않거나 이벤트 루프가 WM_CLOSE 메시지를 처리하지 않는 Windows의 콘솔 애플리케이션은 kill()를 호출해야만 종료할 수 있습니다.

kill()도 참조하세요 .

[noexcept, since 6.6] QProcess::UnixProcessParameters QProcess::unixProcessParameters() const

유닉스 시스템에서 하위 프로세스에 적용될 추가 플래그 및 설정을 설명하는 UnixProcessParameters 객체를 반환합니다. 기본 설정은 기본적으로 구성된 UnixProcessParameters 에 해당합니다.

참고: 이 함수는 유닉스 플랫폼에서만 사용할 수 있습니다.

이 함수는 Qt 6.6에 도입되었습니다.

setUnixProcessParameters() 및 childProcessModifier()도 참조하세요 .

[override virtual] bool QProcess::waitForBytesWritten(int msecs = 30000)

다시 구현합니다: QIODevice::waitForBytesWritten(int msecs).

bool QProcess::waitForFinished(int msecs = 30000)

프로세스가 완료되고 finished() 신호가 전송될 때까지 또는 msecs 밀리초가 경과할 때까지 차단합니다.

프로세스가 완료되면 true 을 반환하고, 그렇지 않으면 false (작업 시간 초과, 오류 발생 또는 이 QProcess 이미 완료된 경우)을 반환합니다.

이 함수는 이벤트 루프 없이 작동할 수 있습니다. 이 함수는 비-GUI 애플리케이션을 작성하거나 비-GUI 스레드에서 I/O 작업을 수행할 때 유용합니다.

경고: 메인(GUI) 스레드에서 이 함수를 호출하면 사용자 인터페이스가 멈출 수 있습니다.

msecs가 -1이면 이 함수는 시간 초과되지 않습니다.

finished(), waitForStarted(), waitForReadyRead() 및 waitForBytesWritten()도 참조하세요 .

[override virtual] bool QProcess::waitForReadyRead(int msecs = 30000)

다시 구현합니다: QIODevice::waitForReadyRead(int msecs).

bool QProcess::waitForStarted(int msecs = 30000)

프로세스가 시작되고 started() 신호가 전송될 때까지 또는 msecs 밀리초가 경과할 때까지 차단합니다.

프로세스가 성공적으로 시작되면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다(작업 시간이 초과되었거나 오류가 발생한 경우). 이 함수를 사용하기 전에 프로세스가 이미 성공적으로 시작되었다면 즉시 반환됩니다.

이 함수는 이벤트 루프 없이 작동할 수 있습니다. 이 함수는 비-GUI 애플리케이션을 작성하거나 비-GUI 스레드에서 I/O 작업을 수행할 때 유용합니다.

경고: 메인(GUI) 스레드에서 이 함수를 호출하면 사용자 인터페이스가 멈출 수 있습니다.

msecs가 -1이면 이 함수는 시간 초과되지 않습니다.

started(), waitForReadyRead(), waitForBytesWritten() 및 waitForFinished()도 참조하세요 .

QString QProcess::workingDirectory() const

QProcess 에 작업 디렉터리가 할당된 경우 이 함수는 프로그램이 시작되기 전에 QProcess 에 입력할 작업 디렉터리를 반환합니다. 그렇지 않으면(즉, 디렉터리가 할당되지 않은 경우) 빈 문자열이 반환되고 QProcess 대신 애플리케이션의 현재 작업 디렉터리가 사용됩니다.

setWorkingDirectory()도 참조하세요 .

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.