Kemudian program tersebut terlihat seperti berjalan di utas lain, utas berbeda dari cmd.
Nah, program ini berjalan dalam proses terpisah , yang memiliki utas sendiri.
Pada Windows, ada dua jenis utama program: konsol dan berjendela.
Program konsol biasanya adalah aplikasi mode teks yang mencetak teks. Ini sudah berperilaku seperti yang Anda inginkan: Anda menjalankan program, shell ( cmd.exe
) tunggu sampai selesai sebelum mengembalikan Anda ke prompt interaktif. Jika program ini berjalan lama, pemutusan paksa cmd.exe
akan mengakhiri program.
Program berjendela biasanya aplikasi yang memiliki antarmuka pengguna grafis (misalnya notepad.exe
, explorer.exe
, firefox.exe
). Mereka tidak berperilaku seperti yang Anda inginkan: ketika Anda menjalankannya cmd.exe
, cmd.exe
tidak menunggu mereka dan segera mengembalikan Anda ke prompt interaktif. Program yang dijalankan berjalan secara independen dari cmd.exe
, dan mengakhiri yang satu tidak berpengaruh pada yang lain.
Perhatikan bahwa program konsol dapat memiliki windows dan program yang berjendela dapat memiliki output konsol. Jadi apa yang membuat program "konsol" atau "berjendela"?
Bagian dari .exe
menentukan apakah itu harus dijalankan dengan subsistem "konsol" atau dengan subsistem "windows". Ini dikonfigurasi (seringkali secara implisit) ketika program dibangun. Ini dapat diubah setelah program dibangun; editbin.exe
(disertakan dengan Visual Studio) dapat memodifikasi .exe
file dan mengubah subsistem mana yang harus digunakan program.
Jika Anda hanya ingin melihat keluaran stdout dan stderr, Anda tidak perlu memodifikasi .exe
file. Biasanya aplikasi berjendela tidak mengirimkan output itu ke mana pun, tetapi Anda dapat mengubahnya dengan pipa / redirect. Misalnya, Anda dapat menjalankan:
SomeWindowedApplication.exe > output.txt
atau, jika Anda memiliki cat
(atau yang setara) tersedia:
SomeWindowedApplication.exe | cat
Melakukannya juga akan menyebabkan cmd.exe
program menunggu untuk berakhir sebelum mengembalikan Anda ke prompt interaktif. Perhatikan bahwa ini tidak memiliki perilaku terminasi yang Anda inginkan (yaitu, mengakhiri cmd.exe
dalam contoh terakhir akan berakhir cat.exe
, tidak ShowWindowedApplication.exe
).
Lihat juga: