Apakah ada Windows CMD yang setara dengan exec Unix shell?


9

Apakah ada yang setara di Windows untuk "exec" Unix Shell? Pada dasarnya, saya perlu menghindari forking proses baru, sehingga pipa input / output dipertahankan, serta id proses.

Edit:

Jadi, inilah masalah saya. Saya memiliki proses A yang memulai skrip, dan skrip ini berakhir dengan mengeksekusi proses B. Saya perlu A untuk mendapatkan semua output B, serta dapat membunuh B dengan membunuh proses yang telah dihasilkannya (skrip) .

Di Unix, menjalankan B dengan execmelakukan pekerjaan itu.


Tidak ada yang setara, setidaknya tidak menggunakan perintah dan program Windows standar.
John Gardeniers

Jika Anda mencoba menjalankan file yang dapat dieksekusi, bukan file batch lain, tidak ada cara (didukung / realistis) untuk melakukan ini. Namun, pipa input / output biasanya diwarisi oleh aplikasi yang berjalan dalam file batch. Jika Anda dapat menjelaskan mengapa Anda ingin melakukan ini, kami mungkin dapat menyarankan alternatif.
Harry Johnston

Proses A harus sudah mendapatkan semua hasil B, kecuali skrip menimpanya. Apakah ini tidak berfungsi?
Harry Johnston

Dimungkinkan untuk menggunakan Win32 API untuk mengatur proses anak untuk mati ketika proses induk melakukannya, namun tidak ada opsi baris perintah bawaan AFAIK. Jika saya memberikan beberapa kode sumber (untuk Visual C ++) apakah Anda dapat membuatnya?
Harry Johnston

@ Harry Saya memalsukan skrip dari Jawa, jadi, jika idenya adalah untuk proses A untuk menggunakan Win32 API, saya khawatir itu tidak akan berhasil, meskipun saya berterima kasih atas upaya tersebut. Lebih baik menjelaskan saja itu tidak mungkin, dan aku akan menerimanya sebagai jawabannya.
Daniel C. Sobral

Jawaban:


7

AFAIK tidak ada. Windows tidak memiliki execv()bagaimana bash exec melakukannya. callberfungsi untuk memanggil file batch (mudah, cukup tafsirkan file dalam juru bahasa saat ini, mirip dengan .perintah bash ) tetapi tidak untuk exe.

Ini membuatnya tidak mungkin untuk menulis skrip pembungkus satu baris untuk skrip dalam bahasa apa pun di Windows. Anda akan selalu mendapatkan bahwa "Hentikan pekerjaan batch?" omong kosong pada Ctrl + C dan membunuh proses batch (tidak dengan Ctrl + C, dari task manager katakan) tidak akan membunuh proses anak. Saya sekarang mencari file template C untuk melakukan pembungkus ini.

UPDATE: Windows memang memiliki _execv()lapisan kompatibilitas POSIX di MSVCRT, tetapi AFAIK (belum mengujinya) itu hanya pembungkus CreateProcesssehingga akan selalu membuat proses baru, tidak dapat menggantikan proses saat ini.


2

Saya pikir panggilan melakukan apa yang Anda inginkan, tetapi saya tidak 100% yakin.


4
Jika Anda ingin menjalankan satu file batch dari yang lain, tanpa meluncurkan contoh baru dari cmd.exe, panggilan adalah jawaban yang tepat.
Harry Johnston

1

Anda dapat membangun perintah batch dinamis dan menjalankannya berdasarkan output dari operasi sebelumnya. Saya tidak yakin ini akan menjadi solusi dalam kasus Anda, tetapi kode berikut berfungsi dengan baik.

SET yourDynamicCommand=SET var=1
%yourDynamicCommand%
ECHO var's value is %var%

ini tidak melakukan apa pun seperti exec...
Jakuje

-1
  • Mengeksekusi batch-file :call
  • Jalankan exe-file : Tidak perlu perintah, panggil langsung oleh/path/to/exe/something.exe
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.