nohup menjalankan proses di latar belakang. Ada yang setara untuk Windows?
nohup menjalankan proses di latar belakang. Ada yang setara untuk Windows?
Jawaban:
Anda dapat menggunakan perintah mulai untuk menjalankan proses di latar belakang jendela perintah.
command1
command2
start command3
command4
command2 menunggu sampai command1 selesai tetapi command4 jangan menunggu command3 selesai.
dan jika Anda perlu menjalankan secara independen dari pengguna yang masuk, Anda harus memulai proses sebagai layanan dan Anda dapat menggunakan anysrv.exe
exec(<some windows executable>)
. Saya dapat dengan jelas melihat di Process Explorer hubungan orangtua-anak dan apa pun yang saya mulai dari dalam exec()
tidak bertahan. Benar bahwa tampaknya berfungsi jika saya memulai cmd.exe
dari Start Menu di mana proses yang dimulai tampaknya menjadi yatim piatu 'dengan benar' ketika cmd.exe
keluar. Jelas saya perlu memahami ini dengan lebih baik. :-(
Anda mungkin ingin melihat layanan windows. Ada beberapa alat yang dapat Anda unduh untuk meng-host proses apa pun sebagai layanan windows. Ini menyebabkan proses memuat di latar belakang saat startup windows, jadi asalkan tidak memerlukan interaksi pengguna Anda harus dapat meng-host-nya seperti ini.
Kit Sumber Daya Windows Server 2003
Alat yang Anda cari disebut srvany.exe.
Satu-satunya cara, di Windows, Anda dapat memiliki proses yang dimulai oleh pengguna terus berjalan setelah logoff (yaitu apa yang "nohup" lakukan) adalah memulainya baik melalui "tugas yang dijadwalkan" atau sebagai layanan Windows. Ketika pengguna keluar dari semua proses dalam sesi masuk mereka akan dibunuh.
Jika Anda ingin mencoba metode "Tugas Terjadwal", Anda pasti ingin tahu cara membuatnya secara terprogram. The Win32_ScheduledJob kelas WMI bisa melakukannya. Dokumentasi disediakan secara terperinci di sini: http://www.microsoft.com/technet/scriptcenter/guide/sas_man_rsxs.mspx?mfr=true Pada dasarnya, Anda sedang melakukan (tanpa malu dicuri dari Microsoft):
Set objService = GetObject("winmgmts:\\.")
Set objNewJob = objService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create("Program-to-execute.exe", "ugly-formatted-time-string-per-Microsoft-docs",True ,1 OR 4 OR 16, , ,JobID)
If Err.Number = 0 Then
Wscript.Echo "New Job ID: " & JobID
Else
Wscript.Echo "An error occurred: " & errJobCreated
End If
Untuk memberikan "pengguna joe" kemampuan untuk membuat tugas yang dijadwalkan, Anda harus mengubah izin pada folder% SystemRoot% \ Tasks. Lihat di sini untuk beberapa info di bagian depan itu: http://technet.microsoft.com/en-us/library/cc785125(WS.10).aspx
Ini semua tergantung pada apa tujuan akhir Anda. Anda bisa menjalankan tugas terjadwal dengan opsi hanya jika pengguna logon diatur ke DISABLED. Anda mungkin dapat menggunakan psexec dari mesin jarak jauh. Lebih baik lagi menjalankan proses sebagai layanan. Lihatlah pencarian Google ini , ini pencarian Google lainnya , utas ini , dan utas lainnya ini untuk beberapa kemungkinan arahan dalam pencarian Anda untuk solusi. Pada akhirnya tampak bahwa tidak ada yang setara dengan nohup pada mesin Windows.
START
perintah tidak melakukan pelepasan, yaitu itu masih anak proses yang membuatnya. Dalam contoh Anda itu akan berarti bahwa 'command3' akan mati setiap kali proses ibu keluar. Unix menghindari ini dengan melakukan dikenal sebagai 'garpu-dua kali' tapi saya tidak tahu yang setara di Windows.