You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by Asif M <as...@gmail.com> on 2008/09/19 01:57:23 UTC
[users@httpd] Apache Control : Starting and Stopping Apache from foreign application
Hi all,
I have the following problem :-
I wrote a Apache Control Program in Visual Studio 2003, which does the
following
1>. Starts Apache with CreateProcess Call. I run Apache on the command
interpreter but not as a service.
2>. Redirects all standard input / output of Apache to the Apache Control
Program so that the Apache cmd-line output actually appears in the log
window of the control program
3>. Stops Apache
#3 has some problem.
When I try to stop Apache, I try the following
1>. Send a control-C control event to the process the CreateProcess call
returns
2>. Close the input pipe which I passed on to Apache during the
CreateProcess
3>. Do an TerminateProcess on the process id returned by the CreateProcess
call
When I run Apache from the command line, a ctrl+c stops both the running
httpd process. However programmatically #1 does not have any effect. It
feels that Apache has not received the Ctrl+C I send.
#2 does not have any impact on the running Apache Process either
#3 only kills the primary httpd process running. It does not kill the second
process.
Here is the code excerpt :-
///////////// STARTING APACHE //////////////////////
_tcscpy(_pszCmdLine,m_szApacheBaseDir);
_tcscat(_pszCmdLine,_T("\\bin\\httpd.exe"));
_tcscat(_pszCmdLine,_T(" -f "));
_tcscat(_pszCmdLine,m_szApacheCfgFile);
_tcscat(_pszCmdLine,_T(" -e debug"));
//.. code to create input/output/error pipes and replicate the handles in
the si structure
if (!::CreateProcess(
NULL,
(LPTSTR)pszCmdLine,
NULL, NULL,
TRUE,
CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP,
NULL, NULL,
&si,
&pi))
{
int n = GetLastError();
return FALSE;
}
///////////////////// STOPPING APACHE ///////////////////////
int j = _tcslen(ctrlC);
WriteFile(m_hStdinWrite, (LPCTSTR)ctrlC,2, &dwWritten, NULL);
if ( !GenerateConsoleCtrlEvent(CTRL_C_EVENT,m_dwProcessGroupId))
j = GetLastError();
CloseHandle(m_hStdinWrite);
CloseHandle(m_hStdinRead);
if (m_dwProcessGroupId)
{
_hProcessHandle =
OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_dwProcessGroupId);
if (_hProcessHandle)
{
GetExitCodeProcess(_hProcessHandle,&_dwExitCode);
int n = GetLastError();
TerminateProcess(_hProcessHandle,1);
}
int n = GetLastError();
}
I would like to know how to send a Ctrl+C event to apache so that I can
cleanly / gracefully shutdown Apache.
Any pointers will be extremely appreciated?
Thanks in Advance,
Asif
Re: [users@httpd] Apache Control : Starting and Stopping Apache from foreign application
Posted by Asif M <as...@gmail.com>.
Hi ,
I am not running apache as a service.
I am running it from another application in a sort of way similar to
launching apache from the command line
Regards,
asif
On Fri, Sep 19, 2008 at 2:13 PM, Foo JH <jh...@extracktor.com> wrote:
> If all you wand to do is start and stop the Apache service, why don't you
> simply do the following on the command line:
> net start Apache2
> net stop Apache2
>
>
> Asif M wrote:
>
>> Hi all,
>>
>> I have the following problem :-
>>
>> I wrote a Apache Control Program in Visual Studio 2003, which does the
>> following
>> 1>. Starts Apache with CreateProcess Call. I run Apache on the command
>> interpreter but not as a service.
>> 2>. Redirects all standard input / output of Apache to the Apache Control
>> Program so that the Apache cmd-line output actually appears in the log
>> window of the control program
>> 3>. Stops Apache
>>
>> #3 has some problem.
>> When I try to stop Apache, I try the following
>> 1>. Send a control-C control event to the process the CreateProcess call
>> returns
>> 2>. Close the input pipe which I passed on to Apache during the
>> CreateProcess
>> 3>. Do an TerminateProcess on the process id returned by the CreateProcess
>> call
>>
>> When I run Apache from the command line, a ctrl+c stops both the running
>> httpd process. However programmatically #1 does not have any effect. It
>> feels that Apache has not received the Ctrl+C I send.
>>
>> #2 does not have any impact on the running Apache Process either
>>
>> #3 only kills the primary httpd process running. It does not kill the
>> second process.
>>
>> Here is the code excerpt :-
>>
>> ///////////// STARTING APACHE //////////////////////
>> _tcscpy(_pszCmdLine,m_szApacheBaseDir);
>> _tcscat(_pszCmdLine,_T("\\bin\\httpd.exe"));
>> _tcscat(_pszCmdLine,_T(" -f "));
>> _tcscat(_pszCmdLine,m_szApacheCfgFile);
>> _tcscat(_pszCmdLine,_T(" -e debug"));
>>
>> //.. code to create input/output/error pipes and replicate the handles in
>> the si structure
>>
>> if (!::CreateProcess(
>> NULL,
>> (LPTSTR)pszCmdLine,
>> NULL, NULL,
>> TRUE,
>> CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP,
>> NULL, NULL,
>> &si,
>> &pi))
>> {
>> int n = GetLastError();
>> return FALSE;
>> }
>>
>>
>> ///////////////////// STOPPING APACHE ///////////////////////
>> int j = _tcslen(ctrlC);
>> WriteFile(m_hStdinWrite, (LPCTSTR)ctrlC,2, &dwWritten, NULL);
>> if ( !GenerateConsoleCtrlEvent(CTRL_C_EVENT,m_dwProcessGroupId))
>> j = GetLastError();
>>
>> CloseHandle(m_hStdinWrite);
>> CloseHandle(m_hStdinRead);
>>
>> if (m_dwProcessGroupId)
>> {
>> _hProcessHandle =
>> OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_dwProcessGroupId);
>> if (_hProcessHandle)
>> {
>> GetExitCodeProcess(_hProcessHandle,&_dwExitCode);
>> int n = GetLastError();
>> TerminateProcess(_hProcessHandle,1);
>> }
>> int n = GetLastError();
>> }
>>
>>
>>
>> I would like to know how to send a Ctrl+C event to apache so that I can
>> cleanly / gracefully shutdown Apache.
>> Any pointers will be extremely appreciated?
>>
>> Thanks in Advance,
>> Asif
>>
>
>
Re: [users@httpd] Apache Control : Starting and Stopping Apache from
foreign application
Posted by Foo JH <jh...@extracktor.com>.
If all you wand to do is start and stop the Apache service, why don't
you simply do the following on the command line:
net start Apache2
net stop Apache2
Asif M wrote:
> Hi all,
>
> I have the following problem :-
>
> I wrote a Apache Control Program in Visual Studio 2003, which does the
> following
> 1>. Starts Apache with CreateProcess Call. I run Apache on the command
> interpreter but not as a service.
> 2>. Redirects all standard input / output of Apache to the Apache
> Control Program so that the Apache cmd-line output actually appears in
> the log window of the control program
> 3>. Stops Apache
>
> #3 has some problem.
> When I try to stop Apache, I try the following
> 1>. Send a control-C control event to the process the CreateProcess call
> returns
> 2>. Close the input pipe which I passed on to Apache during the
> CreateProcess
> 3>. Do an TerminateProcess on the process id returned by the
> CreateProcess call
>
> When I run Apache from the command line, a ctrl+c stops both the running
> httpd process. However programmatically #1 does not have any effect. It
> feels that Apache has not received the Ctrl+C I send.
>
> #2 does not have any impact on the running Apache Process either
>
> #3 only kills the primary httpd process running. It does not kill the
> second process.
>
> Here is the code excerpt :-
>
> ///////////// STARTING APACHE //////////////////////
> _tcscpy(_pszCmdLine,m_szApacheBaseDir);
> _tcscat(_pszCmdLine,_T("\\bin\\httpd.exe"));
> _tcscat(_pszCmdLine,_T(" -f "));
> _tcscat(_pszCmdLine,m_szApacheCfgFile);
> _tcscat(_pszCmdLine,_T(" -e debug"));
>
> //.. code to create input/output/error pipes and replicate the handles
> in the si structure
>
> if (!::CreateProcess(
> NULL,
> (LPTSTR)pszCmdLine,
> NULL, NULL,
> TRUE,
> CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP,
> NULL, NULL,
> &si,
> &pi))
> {
> int n = GetLastError();
> return FALSE;
> }
>
>
> ///////////////////// STOPPING APACHE ///////////////////////
> int j = _tcslen(ctrlC);
> WriteFile(m_hStdinWrite, (LPCTSTR)ctrlC,2, &dwWritten, NULL);
>
> if ( !GenerateConsoleCtrlEvent(CTRL_C_EVENT,m_dwProcessGroupId))
> j = GetLastError();
>
> CloseHandle(m_hStdinWrite);
> CloseHandle(m_hStdinRead);
>
> if (m_dwProcessGroupId)
> {
> _hProcessHandle =
> OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_dwProcessGroupId);
> if (_hProcessHandle)
> {
> GetExitCodeProcess(_hProcessHandle,&_dwExitCode);
> int n = GetLastError();
> TerminateProcess(_hProcessHandle,1);
> }
> int n = GetLastError();
> }
>
>
>
> I would like to know how to send a Ctrl+C event to apache so that I can
> cleanly / gracefully shutdown Apache.
> Any pointers will be extremely appreciated?
>
> Thanks in Advance,
> Asif
---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
" from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org
Re: [users@httpd] Apache Control : Starting and Stopping Apache from foreign application
Posted by Eric Covener <co...@gmail.com>.
On Thu, Sep 18, 2008 at 7:57 PM, Asif M <as...@gmail.com> wrote:
> When I run Apache from the command line, a ctrl+c stops both the running
> httpd process. However programmatically #1 does not have any effect. It
> feels that Apache has not received the Ctrl+C I send.
This thread might give you some background:
http://www.mail-archive.com/dev@httpd.apache.org/msg39402.html
--
Eric Covener
covener@gmail.com
---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
" from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org