Was entspricht 'nohup' in Linux PowerShell?
Ich kenne die Existenz einer doppelten Frage sehr gut . Aber diese Frage ist als beantwortet markiert und ich glaube nicht, dass sie die ursprüngliche Frage beantwortet.
Der $ nohup commandBefehl wird weiterhin ausgeführt, auch wenn der übergeordnete Prozess (Shell) von nohup stirbt. Mehr Infos hier: Was ist der Unterschied zwischen nohup ist und Ampersand .
Im Fall der Win32-API wird die Zeile angezeigt. Wenn das System einen Prozess beendet, werden keine untergeordneten Prozesse beendet, die der Prozess erstellt hat. Das Beenden eines Prozesses generiert keine Benachrichtigungen für WH_CBT-Hook-Prozeduren. . Dies ist das gewünschte Verhalten, nach dem ich frage. Dies funktioniert automatisch mit win32 Powershell. Aber mit Linux Powershell ist Start-Jobes nur ein Hintergrundjob im Powershell-Kontext in dem Sinne, dass es getötet wird, wenn Powershell getötet wird.
Beispiel:
➜ ~ powershell-preview -c "Start-Job { /bin/sleep 1000 }"
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost /bin/sleep 1000
➜ ~ ps ux | grep sleep
mvaidya 166986 0.0 0.0 9032 664 pts/11 S+ 18:59 0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox sleep
Antworten
Die Verwendung des Hintergrundoperators vonStart-Job oder PowerShell v6 + ist keine Option, da durch das Beenden des Jobs auch untergeordnete Prozesse beendet werden, die von dort gestartet werden. Dies sind Jobs - sowohl auf Windows- als auch auf Unix-ähnlichen Plattformen .&
nohupÜber das Start-ProcessCmdlet können Sie jedoch ein ähnliches Verhalten erzielen:
Auf Unix - ähnlichen Plattformen können Sie kombinieren Start-Processmit nohup:
Im folgende Beispiel startet einen Hintergrund Powershell - Instanz, die am Leben bleibt , auch nachdem Sie die Start - Terminal zu schließen; Es gibt .jede Sekunde eine nohupAusgabe aus und sammelt sowohl die stdout- als auch die stderr-Ausgabe in einer Datei nohup.outim aktuellen Verzeichnis, wobei eine solche Datei angehängt wird, falls sie bereits vorhanden ist:
# Runs for 2 minutes and appends both stdout and stderr output to ./nohup.out
Start-Process nohup 'pwsh -nop -c "1..120 | % { write-host . -nonewline; sleep 1 }"'
Unter Windows , wo Start-Processstandardmäßig ein unabhängiger Prozess in einem neuen Konsolenfenster erstellt wird, können Sie -WindowStyle Hiddendiesen Prozess in einem ausgeblendeten Fenster starten, das unabhängig von der Startshell aktiv bleibt.
# Runs for 2 minutes and appends success output to ./nohup.out
Start-Process -WindowStyle Hidden pwsh '-nop -c "1..120 | % { Add-Content -nonewline nohup.out -Value .; sleep 1 }"'