i want to kill a java process through a batch file, but safely.
The problem is, when i use
taskkill /IM java.exe
it wont kill the process because java doesn't allow it.
When i use
taskkill /F /IM java.exe
it works, but there is the risk that files could corrupt, so i don't want to use it.
The subject is to stop a minecraft server which is running on windows. One option on linux is to use screen so i can send a stop-command to this virtual command line but as i know this programm doesn't work on windows. Is there mayby an alternative?
Trying to create a batch file that will open a specific browser (firefox) minimized and direct it to a link. After A specific period 5 seconds the browser will close. I can direct to the link open a specific browser but the browser does not start minimized nor does it close after 5.
#echo off
SET BROWSER=firefox.exe
SET WAIT_TIME=2
start /min %BROWSER% http://www.stackoverflow.com
SET WAIT_TIME=2
taskkill /IM firefox.exe
Your batch file cannot close the process because, while it sets a variable called WAIT_TIME, the batch file does not actually wait; the taskkill command runs immediately, before the process has even started. You need to add a command such as timeout to actually make the batch file wait.
SET WAIT_TIME=2
timeout %WAIT_TIME%
taskkill /im firefox.exe
For the minimized window, there is no good solution. A Windows (non-console) program receives the /min param through its nCmdShow parameter to WinMain(), but it's up to the program what to do with that. Most simply ignore it. There are 3rd-party solutions which will send a minimize command to the window after it has opened, but there's no easy way to do this in Windows Batch without involving another scripting language like VBS or PowerShell.
I prepared one batch file to open calc.exe as a practice. I deleted the batch file accidentally. Now whenever I am closing the calc.exe application, every time it gets open after 10 seconds. Please help me.
in Task manager, kill the process conhost.exe (more details) or Windows command processor(fewer details) wherever you encounter it.
Hope that helped!
Use Process Explorer to see what process calc.exe was started by and prevent that for example by deleting its autorun.
Did you purposely start calculator 10 sec after it's been terminated in batch script? But doesn't seems like your deleted batch script is still running. Open cmd and type in taskkill /im "calc.exe", it should taskkill calculator, if it's not, comment below.
There are many references on Internet claiming that one of differences between a GUI and a console application is that running the GUI application from a batch file does not block its execution, while running the console application does block it.
Few of many references, these are particularly from SO/SE:
How can I get an MFC application to block from the command line?
How to wait for a process to terminate to execute another process in batch file
How do you wait for an exe to complete in batch file?
Run a program in a batch script and wait for it to finish before continuing
Moreover, I myself remember this is/was true.
Yet it does not seem to work this way.
I've tested this on a simple batch file like:
echo Pre
notepad
echo Post
The Post is not printed until I close notepad. Why, when a notepad is clearly a GUI application?
I've tested this on Windows 8, 7, and XP just to rule out a possibility that the behavior has changed in recent versions of Windows. I've tried to disable command extensions as one of possible culprits too.
It has to do with how the application that you launch runs and terminates. Some programs launch another process and then terminate, others continue to run. Calc.exe and Notepad.exe simply run until you close them. Write.exe and any program that launches as a result of a file association (e.g., bitmap, wave file, control panel applet, etc.), actually launch another program and then the process that launched them terminates returning control back to the batch file so it can execute the next line.
Here are some examples:
#echo off
echo Starting Calc.exe
calc.exe
echo Calc was closed by the user
echo Starting Notepad.exe
Notepad.exe
echo Notepad was closed by the user
echo Starting WordPad.exe
write.exe
echo Write launched WordPad and then terminated allowing the batchfile to continue
echo Starting Services.msc
services.msc
echo Windows launched MMC, opened services.msc, then returned control to the batchfile
echo Launching WMP via Chord.wav
c:\windows\media\chord.wav
echo Windows launched WMP, opened Chord.wav, then returned control to the batchfile
The CMD process knows Calc and Notepad are still running because it spawned them itself. The CMD process does not know that the others are still running because the intermediate process terminated.
To observe this, open Process Explorer and view the processes displayed in the hierarchical tree. Calc.exe and Notepad.exe both remain as child processes of the CMD process that ran the batchfile. Write.exe and MMC.exe (services.msc) both become top-level processes, no longer children to the CMD process. WMPlayer.exe remains a child process to svchost.exe, which is how Windows launched it. The CMD process doesn't know they are still running because it didn't launch them, some other Windows process did. So execution continues...
One more example of this is how MSPaint.exe functions. If you run it by using the Windows built-in file association for BMPs, then Windows launches MSPaint.exe and control is immediately returned to the batchfile. However, if you pass the BMP to MSPaint.exe, then the batchfile waits for you to close MSPaint before continuing. (I'm on a dev machine with no BMPs, so create a simple one called C:\MyBitmap.bmp.)
#echo off
C:\MyBitmap.bmp
calc.exe
mspaint.exe C:\MyBitmap.bmp
notepad.exe
Calc.exe will open immediately, Notepad.exe will not open until you close the second instance of MSPaint.exe.
I know you didn't ask about launching Windows processes via their file association, but it just demonstrates how the owning process can change. If the CMD process owns the launched process, it should wait until it terminates to continue execution. If the spawned process hands control off to another process, then the CMD process doesn't know about the grandchild process and it continues on with its execution.
Because it waits for return code.You can use start command to create a separate subprocess:
#echo pre
#start "notepad" notepad
#echo post
I've used Windows since NT 3.1, and I too would have said "cmd.exe does not wait for GUI programs to terminate" when you simply type the name of the program (as opposed to using the START command). Though memory grows dim, I believe it originally worked this way. But today, my statement is true interactively, false for "batch" files. Having been thus reminded, I vaguely think it was intentionally changed as some point, since the naïve batch-writer expects sequential execution, but I can't be sure and I don't know when.
I think the answer lies in this question Difference between Windows and Console application.
I quote from two answers.
Konrad Rudolph answered:
The sole difference is that a console application always spawns a console if it isn't started from one (or the console is actively suppressed on startup). A windows application, on the other hand, does not spawn a console. It can still attach to an existant console or create a new one using AllocConsole.
This makes Windows applications better suited for GUI applications or background applications because you usually don't want to have a terminal window created for those.
oefe answered:
Console and Windows applications behave differently when called interactively from the command prompt:
When you start a console application, the command prompt doesn't return until the console application exits. When you start a windows application, the command returns immediately.
This is not true for batch files; they will always wait until the application exits.
The difference in this bahviour between cmd and batch made you think that it worked before.
I want to be able to close a process on a remote computer using a .bat file.
eg: taskkill /im Myapp.exe
Is using taskkill a suitable way to close an application? eg like clicking the 'X' on the toolbar?
Does it give the app time to run all of it's closing down methods/destructors? Or does it cause it to end abruptly, losing any data that hasn't had a chance to be written before closing?
Yes, if you dont use /f.