um das Programm zu starten… dabei leite ich stderr und stdout weiter in log.0. Ich suche eigentlich nur ein Synonym zu dem in Linux verwendeten „&“ was dazu führt, dass das Programm im Hintergrund ausgeführt wird. (Bsp: java -jar KI.jar &> log.0 & - gebe ich in meiner Linux shell ein und alles ist gut )
Leider konnte ich trotz langer suche nichts finden… wahrscheinlich die falschen Stichwörter Mir ist bewusst das ich auch einfach eine 2. Konsole starten usw. aber es geht nur ums Prinzip.
DOS ist ein sogenanntes Single-Task-System (im Gegensatz zu neueren Betriebssystemen, die Multitask-fähig sind). Das bedeutet: In DOS können keine Programme „im Hintergrund“ ausgeführt werden - Singletask bedeutet, daß immer nur ein Programm gleichzeitig laufen kann. Ein anderes Programm kann nur gestartet werden, wenn das vorigen beendet ist.
Das Einzige, was „im Hintergrund“ laufen KANN unter DOS, sind speicherresidente Programme, die im Interrupt „eingeklinkt“ sind (z.B. im Timer- oder Tastatur-Interrupt o.ä.) - diese werden hardwaremäßig zu bestimmten Ereignissen ausgelöst. (z.B. in bestimmten Zeitintervallen beim Timer-Interrupt oder immer, wenn Taste gedrückt/losgelassen wird beim Keyboard-Interrupt - es gibt auch noch andere…) Dies sind aber nur kurze Programmteile, die „hintenherum“ irgendetwas ausführen - oft auch so Treiber für Peripheriegeräte.
Aber ganze Programme können unter DOS nicht ohne weiteres „im Hintergrund“ laufen - d.h., damit ein Programmteil „im Interrupt“ läuft, muß es schon entsprechend dafür programmiert sein.
Um zwei „DOS-Programme“ gleichzeitig auszuführen, wird es also wohl keine andere Möglichkeit geben, als unter einem Multitask-fähigen System zwei „DOS-Fenster“ zui starten (sofern dies vom System unterstützt wird).
ABER: Normalerweise laufen die DOS-Emulationen in einem „abgegrenzten Raum“ und können nicht mit dem restlichen System interagieren - außer über Dateizugriffe. (D.h. es ist z.B. möglich, daß ein Programm ein File auf die Festplatte schreibt und ein anderes aus dem selben File liest. Dazu müssen aber beide Programme das File im sogenannten „Shared-Modus“ geöffnet haben, also daß mehrere „Instanzen“ gleichzeitig auf dasselbe File zugreifen dürfen, während es geöffnet ist - anderenfalls ist ein geöffnetes File für jedes andere Programm außer für das, von dem es geöffnet wurde, für Zugriffe gesperrt.)
Ich hoffe, ich konnte helfen. Falls es noch sonstige Fragen zu diesem Thema oder allgemein zu DOS, Programmierung in DOS ö.ä. gibt, bin ich auch weiterhin bereit, zu helfen.
ich verstehe noch nicht ganz Dein Anliegen. Du kannst Befehle, die Du über die DOS-Ebene einzeln aufrufen würdest, natürlich einfach in eine Datei mit der Endung .BAT packen und als ersten Befehl - falls Du nicht willst, dass auf dem Bildschirm etwas zu sehen ist - den Befehl @echo off eingeben.
Aber ich bin mir nicht sicher, ob das wirklci Dein Problem ist, weil die Lösung natürlich trivial ist.
im Allgemeinen ging es mir nur darum ob ich mein Programm im Hintergrund laufen lassen kann und in derselben Konsole einfach mittels jmap mir den heap in ne file packen und mit Hilfe von jhat dann den heap parsen und mit nem browser anschauen.
Es ging einfach nur um das Prinzip, und Enrico war ja so nett mir genauer zu erläutern warum das nicht möglich ist und in welche Ausnahmefällen es gibt.
Meine Ausgaben schreibe ich ja absichtlich in die Datei, weil ich einige Meldungen von meinem Programm ganz gut brauchen kann für die Analyse.
das & gibt es in den Windows Betriebssystemen nicht. Wenn ich ein Programm im Hintergrund starten möchte, dann lasse ich es mit „at“ starten. Bei so langen Kommandozeilen mache ich für den Start eine Batch-Datei. Es geht aber natürlich auch so.
Um also die Konsole im Hintergrund zu starten:
at 20:58 c:\Programme\java\bin\java.exe -Dcom.sun....
Dann startet das Programm zur angegebenen Uhrzeit in einer eigenen Shell.
Die wirklich gesuchte Antwort war:
start /b java …
Damit kann man jedes Programm in einer Dos-Shell unter Windows (aber nicht im Original-DOS, was hier aber auch gar nicht gemeint war) starten, ohne eine neue Konsole zu starten.