Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch verbraucht zu viel RAM

Frage Entwicklung Batch & Shell

Mitglied: Alme123

Alme123 (Level 1) - Jetzt verbinden

12.05.2013 um 09:56 Uhr, 1924 Aufrufe, 11 Kommentare

Hallo zusammen,

ich habe folgendes Problem mit diesem BatchScript:

01.
@echo off 
02.
title Batch 
03.
:start 
04.
ping localhost -n 1 >nul 
05.
tasklist /v | findstr /c:"cmd.exe" | findstr /v /c:"Batch" >"%temp%\allcmds.tmp" 
06.
if errorlevel 1 goto start 
07.
:: Weiterer unwichtiger Code...
Dieses soll die laufenden cmd Prozesse (außer den eigenen) finden und in eine Datei schreiben.
Dies funktioniert tadellos. Leider verbraucht das Script zu viel RAM (20-40% bei mir)

Könnte man das Script dazubringen, weniger RAM zu verspeisen?
Ein höhrerer Ping würde das Script zu sehr stoppen, es soll nämlich gestartete cmd-Prozesse schnellstmöglich weiterverarbeiten.

Vielen Dank für eure Mühe im Vorraus,

Alme123
Mitglied: rubberman
12.05.2013 um 13:04 Uhr
Hallo Alme123,

in deinem anderen Thread wird WMIC dazu benutzt um von der PID der cmd.exe auf den Speicherort der Batchdatei zu schließen. Welchen Sinn macht dann eigentlich deine allcmds.tmp? Ist es nicht sinnvoller alles mit WMIC in einem Rutsch abzuwickeln?

Grüße
rubberman
Bitte warten ..
Mitglied: Alme123
12.05.2013 um 13:23 Uhr
@rubberman

du hast Recht,

in einem Rutsch wäre es besser. Leider kenne ich wmic erst seit heute und komm damit auch nicht klar.

Der bisherige Code:
01.
:start 
02.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
03.
title 123 
04.
ping localhost -n 2 >nul 
05.
tasklist /v | findstr /c:"cmd.exe" | findstr /v /c:"123" >"%temp%\123.tmp" 
06.
if errorlevel 1 goto start 
07.
set "Zeile=" 
08.
set "Var=" 
09.
set "Nach=cmd.exe                       " 
10.
set "Vor= Console" 
11.
>"%temp%\123.vbs" echo Set a=WScript.Arguments:Set rE=New RegExp:rE.Pattern=a(1)^&"(.+)"^&a(2):For Each M In rE.Execute(a(0)):WScript.Echo M.SubMatches(0):Next 
12.
for /f "delims=" %%i in ('findstr /rc:"%Nach%.*%Vor%" "%temp%\123.tmp"') do set "Zeile=%%i" 
13.
if not defined Zeile goto start 
14.
for /f "delims=" %%i in ('cscript //nologo //T:15 "%temp%\123.vbs" "%Zeile%" "%Nach%" "%Vor%"') do set "Var=%%i" 
15.
for /f "tokens=2*" %%i in ('"wmic process where ProcessId='%var%' get CommandLine"') do set "ExePath=%%~j" 
16.
set "ExePath=%ExePath:~1%" 
17.
set "ExePath=%ExePath:~0,-5%"

Könntest du vlt. einen Denkansatz schreiben?

Danke im Vorraus,

Alme123
Bitte warten ..
Mitglied: rubberman
12.05.2013 um 13:39 Uhr
Hallo Alme123,

mein Ansatz sähe etwa so aus:
01.
@echo off &setlocal 
02.
 
03.
REM Eigene PID finden, um später diesen und die Tochterprozesse (WMIC) auszufiltern 
04.
setlocal EnableDelayedExpansion 
05.
set "uid=" 
06.
for /l %%i in (1 1 128) do (set /a "bit=!random!&1" &set "uid=!uid!!bit!") 
07.
for /f "tokens=2 delims==" %%i in ( 
08.
  'WMIC Process WHERE "Name='cmd.exe' AND CommandLine LIKE '%%!uid!%%'" GET ParentProcessID /value' 
09.
) do for /f %%j in ("%%i") do (endlocal &set "PID=%%j") 
10.
 
11.
REM finde alle cmd.exe Prozesse (außer diesem und dessen Tochterprozesse), hole die CommandLine Eigenschaft 
12.
for /f "tokens=1* delims==" %%i in ( 
13.
  'WMIC Process WHERE "Name='cmd.exe' AND NOT ProcessID=%PID% AND NOT ParentProcessID=%PID%" GET CommandLine /value 2^>nul' 
14.
) do for /f "delims=" %%k in ("%%j") do ( 
15.
  set "CmdLn=" 
16.
  set "BatPath=" 
17.
  set "CmdLn=%%k" 
18.
  REM Extrahiere den Batch Pfad 
19.
  setlocal EnableDelayedExpansion 
20.
    set "CmdLn=!CmdLn:cmd /c "=!" 
21.
    for %%l in (!CmdLn!) do ( 
22.
      if "!!"=="" endlocal 
23.
      if not defined BatPath if /i "%%~xl"==".bat" set "BatPath=%%~l" 
24.
25.
  setlocal EnableDelayedExpansion 
26.
    echo !BatPath! 
27.
  endlocal 
28.
29.
pause
Grüße
rubberman
Bitte warten ..
Mitglied: Alme123
12.05.2013 um 15:08 Uhr
@rubberman

dein Denkansatz funktioniert, eine letzte Frage:
Wie kann ich das Script erweitern, sodass ich die PID des !BatPath!-Prozesses bekomme?

Vielen Dank für deine Mühe,

Alme123
Bitte warten ..
Mitglied: rubberman
12.05.2013, aktualisiert um 16:59 Uhr
Hallo Alme123,

ich weiß nicht wie die Ausgabe aussehen soll, aber vielleicht so:
01.
@echo off &setlocal 
02.
 
03.
REM Eigene PID finden, um später diesen und die Tochterprozesse (WMIC) auszufiltern 
04.
setlocal EnableDelayedExpansion 
05.
set "uid=" 
06.
for /l %%i in (1 1 128) do (set /a "bit=!random!&1" &set "uid=!uid!!bit!") 
07.
for /f "tokens=2 delims==" %%i in ( 
08.
  'WMIC Process WHERE "Name='cmd.exe' AND CommandLine LIKE '%%!uid!%%'" GET ParentProcessID /value' 
09.
) do for /f %%j in ("%%i") do (endlocal &set "PID=%%j") 
10.
 
11.
REM finde alle cmd.exe Prozesse (außer diesem und dessen Tochterprozesse), hole die CommandLine und ProcessID Eigenschaften 
12.
set "ProcessID=" 
13.
for /f "delims=" %%i in ( 
14.
  'WMIC Process WHERE "Name='cmd.exe' AND NOT ProcessID=%PID% AND NOT ParentProcessID=%PID%" GET CommandLine^,ProcessID /value 2^>nul' 
15.
) do for /f "delims=" %%j in ("%%i") do ( 
16.
  set "%%j" 
17.
  if defined ProcessID ( 
18.
    setlocal EnableDelayedExpansion 
19.
      echo !ProcessID! !BatPath! 
20.
    endlocal 
21.
    set "ProcessID=" 
22.
    set "BatPath=" 
23.
  ) else ( 
24.
    REM Extrahiere den Batch Pfad 
25.
    setlocal EnableDelayedExpansion 
26.
      set "CommandLine=!CommandLine:cmd /c "=!" 
27.
      for %%l in (!CommandLine!) do ( 
28.
        if "!!"=="" endlocal 
29.
        if not defined BatPath if /i "%%~xl"==".bat" set "BatPath=%%~l" 
30.
31.
32.
33.
pause
Grüße
rubberman

EDIT: Zeile 22 eingefügt
Bitte warten ..
Mitglied: Alme123
12.05.2013 um 18:45 Uhr
@rubberman

vielen Dank für deine Mühe, dein Script funktioniert.
Die Frage ist geschlossen.

Alme123

[Theard closed]
Bitte warten ..
Mitglied: Alme123
13.05.2013 um 20:19 Uhr
@rubberman

eine allerletzte Frage:

Ich habe ein paar Dateien, dessen Prozesse ausgeschlossen werden sollen.
Sie sind in prozess.txt gespeichert und sollen nicht weiterverarbeitet werden, sondern "goto action" ausführen.

Mein Denkansatz war (hinter deinem Script):

01.
findstr "%BatPath%" "prozess.txt" >nul 
02.
if errorlevel 0 goto action
leider nimmt er aber beim wechseln zum Script (goto :start (Zeile 2: ":start)) immer nur den ersten Prozess.

Meine 2 Ideen:

1. Script(teil) in eine for-schleife programmieren, und mit Parametern weitergeben (call :weiter %ProcessID% "%BatBatch%")

2. Scriptteil neuschreiben und meinen Denkansatz einbauen


Vielen Dank im Vorraus,

Alme123
Bitte warten ..
Mitglied: rubberman
13.05.2013 um 21:10 Uhr
Hallo Alme123,

der ganze Spaß wird ja bereits in einer Schleife ausgeführt. Ein GOTO Label aus der Schleife heraus wird unweigerlich zum Abbruch der Schleife führen. Ein CALL :Label hingegen wird hier wohl die bessere Variante sein.
01.
@echo off &setlocal 
02.
 
03.
REM Eigene PID finden, um später diesen und die Tochterprozesse (WMIC) auszufiltern 
04.
setlocal EnableDelayedExpansion 
05.
set "uid=" 
06.
for /l %%i in (1 1 128) do (set /a "bit=!random!&1" &set "uid=!uid!!bit!") 
07.
for /f "tokens=2 delims==" %%i in ( 
08.
  'WMIC Process WHERE "Name='cmd.exe' AND CommandLine LIKE '%%!uid!%%'" GET ParentProcessID /value' 
09.
) do for /f %%j in ("%%i") do (endlocal &set "PID=%%j") 
10.
 
11.
REM finde alle cmd.exe Prozesse (außer diesem und dessen Tochterprozesse), hole die CommandLine und ProcessID Eigenschaften 
12.
set "ProcessID=" 
13.
set "BatPath=" 
14.
for /f "delims=" %%i in ( 
15.
  'WMIC Process WHERE "Name='cmd.exe' AND NOT ProcessID=%PID% AND NOT ParentProcessID=%PID%" GET CommandLine^,ProcessID /value 2^>nul' 
16.
) do for /f "delims=" %%j in ("%%i") do ( 
17.
  set "%%j" 
18.
  if defined ProcessID ( 
19.
    setlocal EnableDelayedExpansion 
20.
      echo !ProcessID! !BatPath! 
21.
      findstr /ic:"!BatPath!" "prozess.txt" >nul && call :action 
22.
    endlocal 
23.
    set "ProcessID=" 
24.
    set "BatPath=" 
25.
  ) else ( 
26.
    REM Extrahiere den Batch Pfad 
27.
    setlocal EnableDelayedExpansion 
28.
      set "CommandLine=!CommandLine:cmd /c "=!" 
29.
      for %%l in (!CommandLine!) do ( 
30.
        if "!!"=="" endlocal 
31.
        if not defined BatPath if /i "%%~xl"==".bat" set "BatPath=%%~l" 
32.
33.
34.
35.
pause 
36.
goto :eof 
37.
 
38.
:action 
39.
setlocal DisableDelayedExpansion 
40.
echo ****** Mach was mit %ProcessID% und "%BatPath%"! ****** 
41.
endlocal 
42.
goto :eof
Grüße
rubberman
Bitte warten ..
Mitglied: Alme123
19.05.2013 um 19:55 Uhr
@rubberman

danke rubberman, leider brauche ich dein Script noch einmal. Etwas anders:
Dein Script soll (unabhängig von den anderen) alle Prozesse heraussuchen die NICHT in der "prozess.txt" (s. Zeile 21) vorhanden sind. Mein Versuch
01.
findstr /ivc:"!BatPath!" "prozess.txt" >nul && call :action
hat leider nicht geholfen, das Script nimmt immer den Prozess, obwohl er in der Datei steht (Parameter v).

Kannst du (oder auch ein anderer) mir bitte weiterhelfen?

Alme123
Bitte warten ..
Mitglied: rubberman
19.05.2013, aktualisiert um 20:33 Uhr
Hallo Alme123,

nimm mein Script, wie es ist und ersetze in besagter Zeile 21 das && durch ein ||. Ansonsten solltest du noch einmal deine Textdatei prüfen, ob auch wirklich der gesamte Pfad in den Zeilen angegeben ist.

Grüße
rubberman
Bitte warten ..
Mitglied: Alme123
19.05.2013 um 20:49 Uhr
Halle rubberman,

vielen Dank für deine Hilfe, diese Frage ist jetzt endgültig geklärt.

Alme123
Bitte warten ..
Ähnliche Inhalte
Windows 10
Svhost (netsvc) verbraucht allen Datentraffic
Frage von ChrisDynamiteWindows 102 Kommentare

Guten Tag, bei einem Computer, Windows 10 in einem Domänennetzwerk kann ich über den Ressourcenmonitor und den Taskmanager ermitteln, ...

Festplatten, SSD, Raid
SSD verbraucht freien Speicherplatz pro Sekunde
Frage von AliRatorFestplatten, SSD, Raid14 Kommentare

Hallo Community Ich habe ein Problem mit meiner SSD. Nach einem Bluescreen (war den ersten den ich je auf ...

Windows Server
RDP auf Win2012R2 - User ohne Berechtigung verbraucht Lizenz
Frage von BauigelWindows Server8 Kommentare

Hallo zusammen, leider bin ich trotz intensiver Suche nicht weitergekommen und ihr könnt mir helfen. EDV-Aufbau: ActiveDirectory mit separatem ...

CPU, RAM, Mainboards
RAM Planung
gelöst Frage von PharITCPU, RAM, Mainboards8 Kommentare

Hallo allerseits, gerade auf der Fujitsu-Homepage einen Server gesehen, den die "für den Mittelstand" bezeichnen, der 1,5TB RAM unterstützt. ...

Neue Wissensbeiträge
DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 StundeDSL, VDSL

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 1 StundeWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 4 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement17 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...