Unix kabuğunun exec'sinin Windows CMD eşdeğeri var mı?


9

Windows'ta Unix Shell'in "exec" yazılımına eşdeğer bir şey var mı? Temel olarak, giriş / çıkış borularının yanı sıra işlem kimliği korunacak şekilde yeni bir işlem istemekten kaçınmalıyım.

Düzenle:

İşte benim sorunum. Bir komut dosyası başlatan bir işlem A var ve bu komut dosyası B işlemi gerçekleştirerek biter. Ben A'nın tüm B çıktısını almak için yanı sıra ortaya çıkardığı süreci (komut dosyası) öldürerek B öldürmek gerekir .

Unix'te B'yi çalıştırmak execbu işi yapar.


Eşdeğer yoktur, en azından standart Windows komutları ve programları kullanılmaz.
— John Gardeniers

Başka bir toplu iş dosyası yerine yürütülebilir bir dosya çalıştırmaya çalışıyorsanız, bunu yapmanın (desteklenen / gerçekçi) bir yolu yoktur. Ancak, giriş / çıkış boruları normalde toplu iş dosyasında çalışan uygulamalar tarafından devralınır. Bunu neden yapmak istediğinizi açıklayabilirseniz, alternatifler önerebiliriz.
— Harry Johnston

Komut dosyası bunu geçersiz kılmadığı sürece A işleminin B çıktılarının tümünü alması gerekir. Bu çalışmıyor mu?
— Harry Johnston

Üst işlem yapıldığında bir alt işlemin ölmesini ayarlamak için Win32 API'yi kullanmak mümkündür, ancak AFAIK yerleşik komut satırı seçeneği yoktur. Bazı kaynak kodu (Visual C ++ için) sağlarsanız, bunu oluşturmak mümkün?
— Harry Johnston

@Harry Komut dosyasını Java'dan soruyorum, bu nedenle, fikir A sürecinin bu Win32 API'sini kullanması için ise, çaba için minnettarım, ancak bunun işe yaramadığından korkuyorum. Sadece açıklamak daha iyi mümkün değil ve ben bunu cevap olarak kabul edeceğim.
— Daniel C.Sobral

Yanıtlar:


7

AFAIK yok. Windows execv()bash exec bunu nasıl yapar. calltoplu iş dosyalarını çağırmak için çalışır (kolay, dosyayı geçerli yorumlayıcıda bash .komutuna benzer şekilde yorumlayın ) ancak exes için değil.

Bu, Windows üzerinde herhangi bir dilde komut dosyaları için tek satırlı sarmalayıcı komut dosyaları yazmayı imkansız hale getirir. Her zaman "Toplu işi sonlandırılsın mı?" Ctrl + C'de bok ve toplu işlemin öldürülmesi (Ctrl + C ile değil, görev yöneticisinden) çocuk sürecini öldürmez. Şimdi bu kaydırma yapmak için bir C şablon dosyası arıyorum.

GÜNCELLEME: Windows, _execv()MSVCRT'deki POSIX uyumluluk katmanındadır, ancak AFAIK (test etmedi) sadece bir sarıcıdır, CreateProcessbu nedenle her zaman yeni bir işlem oluşturacaktır, mevcut işlemin yerini alamaz.


2

Bence çağrı istediğini yapar, ama% 100 emin değilim.


4
Bir toplu iş dosyasını başka bir toplu iş dosyasını çalıştırmak istiyorsanız, cmd.exe dosyasının yeni bir örneğini başlatmadan çağrı doğru yanıttır.
— Harry Johnston

1

Dinamik bir toplu iş komutu oluşturabilir ve önceki işlemlerin çıktısına göre çalıştırabilirsiniz. Bunun sizin durumunuzda bir çözüm olacağından emin değilim, ancak aşağıdaki kod gayet iyi çalışıyor.

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

Bu böyle bir şey yapmaz exec...
— Jakuje

-1
  • Toplu iş dosyalarını yürütün :call
  • Exe dosyalarını yürütün : Komut gerekmez, doğrudan/path/to/exe/something.exe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.