windows - Gytning en uafhængig tråd eller proces i Ruby

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg kan nærme dette i den forkerte retning, så enhver hjælp ville blive værdsat.


Jeg har et Ruby-script, der blandt andet starter en eksekverbar. Jeg vil starte denne eksekverbare - aktuelt udløses ved hjælp af system '' - og fortsæt med scriptet. Når scriptet er færdigt, vil jeg have det til at gå ud, men lad det køre køre.


Oprindeligt havde jeg følgende


# Do some work
# Start the executable
system("executable\_to\_run.exe")

# Continue working


Men executable\_to\_run.exe er en blokering eksekverbar, og systemet '' vil ikke afslutte, før den eksekverbare slutter kører (som jeg ikke vil have det til)


Så jeg har nu noget som dette (drastisk skåret ned)


# Do some work
# Start the executable on it's one thread
Thread.new do
  system("executable\_to\_run.exe")
end

# Continue working


Dette fungerer godt, fordi scriptet kan fortsætte, mens tråden kører den eksekverbare i baggrunden. Desværre, når mit script kommer til at afslutte, kører den eksekverbare tråd stadig, og den vil ikke gå ud, før tråden kan afslutte. Hvis jeg dræber den eksekverbare, bliver trådudgangene og scriptet udgang.


Så hvad jeg skal gøre er at udløse 'executable\_to\_run.exe' og bare lade det køre i baggrunden.


Jeg bruger ikke Ruby 1.8.7 på Windows, hvilket betyder, at gaffel ikke er implementeret. Jeg kan ikke opgradere til 1,9, da der er interne og eksterne teamafhængigheder, som jeg først skal løse først (og som ikke bliver gjort snart).


Jeg har prøvet



  • Kørsel af processen via 'start'
    kommando men det blokkeres stadig

  • Opkald Thread.kill på den eksekverbare tråd
    men det kræver stadig den eksekverbare
    at blive dræbt



Så er det noget, jeg kan gøre i Ruby, og jeg mangler bare noget eller har jeg et problem, fordi jeg ikke kan bruge Fork?


Tak på forhånd

Bedste reference


detunized s svar skal arbejde på windows. Denne ene er cross-platform:


pid = spawn 'some\_executable'
Process.detach(pid) #tell the OS we're not interested in the exit status

Andre referencer 1


Jeg har lige prøvet og start blokerer ikke på Windows 7 x64 med Ruby 1.8.7.


system 'start notepad'
puts 'Exiting now...'


Dette er naturligvis Windows-specifik.