Ada cara untuk menjalankan proses di latar belakang di Windows? setara nohup untuk windows

12

nohup menjalankan proses di latar belakang. Ada yang setara untuk Windows?

Jader Dias
sumber

Jawaban:

8

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

Aragorn
sumber
Sejauh yang saya mengerti STARTperintah 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.
unixhacker2010
setidaknya pada Windows 7 command3 TIDAK akan mati, misalnya Anda dapat masuk ke cmd prompt "mulai notepad" kemudian keluar dan notepad masih akan berjalan
Aragorn
Yap, kamu benar. Namun saya menguji dari dalam bahasa lain di mana semua yang saya bisa 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.exedari Start Menu di mana proses yang dimulai tampaknya menjadi yatim piatu 'dengan benar' ketika cmd.exekeluar. Jelas saya perlu memahami ini dengan lebih baik. :-(
unixhacker2010
6

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.

Tempat menyimpan bahan makanan
sumber
5

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

Evan Anderson
sumber
Apa keuntungan melakukan ini vs menggunakan schtasks.exe atau GUI Penjadwal Tugas?
Helvick
Tidak ada banyak perbedaan fungsional antara API dan schtasks.exe ini. Keuntungan dari GUI adalah Anda dapat melakukan ini secara terprogram.
Evan Anderson
0

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.

Wesley
sumber
Tujuan utama saya adalah untuk menyembunyikan proses dari pengguna. Sembunyikan jendela yang muncul.
Jader Dias