nohup chạy một quá trình trong nền. Có bất kỳ tương đương cho Windows?
nohup chạy một quá trình trong nền. Có bất kỳ tương đương cho Windows?
Câu trả lời:
Bạn có thể sử dụng lệnh start để chạy một tiến trình trong nền của cửa sổ lệnh.
command1
command2
start command3
command4
lệnh2 đợi cho đến khi lệnh1 kết thúc nhưng lệnh4 không đợi lệnh3 kết thúc.
và nếu bạn cần chạy độc lập với người dùng đã đăng nhập, bạn cần bắt đầu quá trình dưới dạng dịch vụ và bạn có thể sử dụng anysrv.exe
exec(<some windows executable>)
. Tôi có thể thấy rõ trong Process Explorer mối quan hệ cha-con và bất cứ điều gì tôi bắt đầu từ bên trong exec()
không tồn tại. Chính xác là nó có vẻ hoạt động nếu tôi bắt đầu cmd.exe
từ Menu bắt đầu trong đó quá trình bắt đầu dường như mồ côi 'chính xác' khi cmd.exe
thoát. Rõ ràng tôi cần hiểu điều này tốt hơn. :-(
Bạn có thể muốn xem các dịch vụ windows. Có một số công cụ bạn có thể tải xuống để lưu trữ bất kỳ quy trình nào dưới dạng dịch vụ windows. Điều này khiến quá trình tải nền sau khi khởi động windows, do đó, với điều kiện không yêu cầu tương tác người dùng, bạn sẽ có thể lưu trữ nó như thế này.
Bộ tài nguyên Windows Server 2003
Công cụ mà bạn theo đuổi được gọi là srvany.exe.
Cách duy nhất, trong Windows, bạn có thể bắt đầu một quá trình bởi người dùng tiếp tục chạy sau khi đăng xuất (nghĩa là "nohup" làm gì) là bắt đầu nó thông qua "tác vụ theo lịch trình" hoặc như một dịch vụ Windows. Khi người dùng đăng xuất tất cả các quy trình trong phiên đăng nhập của họ sẽ bị giết.
Nếu bạn đang chơi thử phương pháp "Nhiệm vụ theo lịch trình", bạn sẽ muốn biết cách tạo chúng theo chương trình. Lớp WMI Win32_SchediatedJob có thể làm điều đó. Tài liệu được cung cấp chi tiết tại đây: http://www.microsoft.com/technet/scriptcenter/guide/sas_man_rsxs.mspx?mfr=true Về cơ bản, bạn đang xem (bị đánh cắp một cách đáng xấu hổ từ 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
Để cấp cho "người dùng joe" khả năng tạo các tác vụ theo lịch trình, bạn sẽ phải sửa đổi quyền trên thư mục% SystemRoot% \ T task. Xem ở đây để biết một số thông tin ở mặt trước đó: http://technet.microsoft.com/en-us/l Library / cc785125 (WS.10) .aspx
Tất cả điều này phụ thuộc vào mục đích cuối cùng của bạn là gì. Bạn có thể chạy một tác vụ theo lịch trình với tùy chọn chỉ chạy nếu người dùng đã đăng nhập được đặt thành DISABLED. Bạn có thể có thể sử dụng psexec từ một máy từ xa. Tốt hơn nữa có thể là chạy quá trình như một dịch vụ. Kiểm tra tìm kiếm Google này , tìm kiếm Google khác , chủ đề này và chủ đề khác này để biết một số khách hàng tiềm năng có thể tìm kiếm giải pháp của bạn. Cuối cùng, có vẻ như không có chính xác tương đương với nohup trên máy Windows.
START
lệnh không thực hiện tách rời, tức là nó vẫn là một phần tử con của quá trình tạo ra nó. Trong ví dụ của bạn, điều đó có nghĩa là 'lệnh3' sẽ chết bất cứ khi nào quá trình mẹ thoát ra. Unix cắt ngang điều này bằng cách làm được gọi là 'fork-hai lần' nhưng tôi không biết tương đương trong Windows.