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.