summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorunknown <joreland@mysql.com>2004-05-11 21:25:16 +0200
committerunknown <joreland@mysql.com>2004-05-11 21:25:16 +0200
commit23b508378858bb9570ba1981e7312d88ac23f521 (patch)
tree88afdd6ff4b41625eb98b85c689fcaa8076c36da /ndb
parentf23d1ad6c2f2fb9e4e6204936eb07e902320f03d (diff)
downloadmariadb-git-23b508378858bb9570ba1981e7312d88ac23f521.tar.gz
cpcd - setsid - angle fixes
ndb/src/cw/cpcd/Process.cpp: Write pgrp in pid-file Always operate on process group instead of process ndb/src/mgmclient/test_cpcd/test_cpcd.cpp: Test using different programs
Diffstat (limited to 'ndb')
-rw-r--r--ndb/src/cw/cpcd/Process.cpp41
-rw-r--r--ndb/src/mgmclient/test_cpcd/test_cpcd.cpp14
2 files changed, 30 insertions, 25 deletions
diff --git a/ndb/src/cw/cpcd/Process.cpp b/ndb/src/cw/cpcd/Process.cpp
index 76639a2a618..8a79669937d 100644
--- a/ndb/src/cw/cpcd/Process.cpp
+++ b/ndb/src/cw/cpcd/Process.cpp
@@ -110,7 +110,7 @@ CPCD::Process::isRunning() {
}
/* Check if there actually exists a process with such a pid */
errno = 0;
- int s = kill((pid_t) m_pid, 0); /* Sending "signal" 0 to a process only
+ int s = kill((pid_t)-m_pid, 0); /* Sending "signal" 0 to a process only
* checkes if the process actually exists */
if(s != 0) {
switch(errno) {
@@ -127,7 +127,6 @@ CPCD::Process::isRunning() {
}
return false;
}
-
return true;
}
@@ -149,7 +148,6 @@ CPCD::Process::readPid() {
f = fopen(filename, "r");
if(f == NULL){
- logger.debug("readPid - %s not found", filename);
return -1; /* File didn't exist */
}
@@ -358,7 +356,7 @@ CPCD::Process::start() {
switch(pid = fork()) {
case 0: /* Child */
setsid();
- writePid(getpid());
+ writePid(getpgrp());
if(runas(m_runas.c_str()) == 0){
do_exec();
}
@@ -383,11 +381,10 @@ CPCD::Process::start() {
switch(fork()) {
case 0: /* Child */
signal(SIGCHLD, SIG_IGN);
- pid_t pid;
switch(pid = fork()) {
case 0: /* Child */
setsid();
- writePid(getpid());
+ writePid(getpgrp());
if(runas(m_runas.c_str()) != 0){
_exit(1);
}
@@ -421,13 +418,16 @@ CPCD::Process::start() {
logger.critical("Unknown process type");
return -1;
}
-
+
while(readPid() < 0){
sched_yield();
}
- if(pid != -1 && pid != m_pid){
- logger.error("pid and m_pid don't match: %d %d", pid, m_pid);
+ errno = 0;
+ pid_t pgid = getpgid(pid);
+
+ if(pgid != -1 && pgid != m_pid){
+ logger.error("pgid and m_pid don't match: %d %d (%d)", pgid, m_pid, pid);
}
if(isRunning()){
@@ -446,33 +446,32 @@ CPCD::Process::stop() {
unlink(filename);
if(m_pid <= 1){
- logger.critical("Stopping process with bogus pid: %d", m_pid);
+ logger.critical("Stopping process with bogus pid: %d id: %d",
+ m_pid, m_id);
return;
}
m_status = STOPPING;
-
- const pid_t pgid = - getpgid(m_pid);
- int ret = kill(pgid, SIGTERM);
+
+ errno = 0;
+ int ret = kill(-m_pid, SIGTERM);
switch(ret) {
case 0:
- logger.debug("Sent SIGTERM to pid %d", (int)pgid);
+ logger.debug("Sent SIGTERM to pid %d", (int)-m_pid);
break;
default:
- logger.debug("kill pid: %d : %s", (int)pgid, strerror(errno));
+ logger.debug("kill pid: %d : %s", (int)-m_pid, strerror(errno));
break;
}
- errno = 0;
- ret = kill(pgid, 0);
- if(ret == 0) {
+ if(isRunning()){
errno = 0;
- ret = kill(pgid, SIGKILL);
+ ret = kill(-m_pid, SIGKILL);
switch(ret) {
case 0:
- logger.debug("Sent SIGKILL to pid %d", (int)pgid);
+ logger.debug("Sent SIGKILL to pid %d", (int)-m_pid);
break;
default:
- logger.debug("kill pid: %d : %s\n", (int)pgid, strerror(errno));
+ logger.debug("kill pid: %d : %s\n", (int)-m_pid, strerror(errno));
break;
}
}
diff --git a/ndb/src/mgmclient/test_cpcd/test_cpcd.cpp b/ndb/src/mgmclient/test_cpcd/test_cpcd.cpp
index 9ffd5ed6201..32f0adbcf26 100644
--- a/ndb/src/mgmclient/test_cpcd/test_cpcd.cpp
+++ b/ndb/src/mgmclient/test_cpcd/test_cpcd.cpp
@@ -88,10 +88,16 @@ void define(){
//proc.m_proc.m_stdout = "log.out";
//proc.m_proc.m_stderr = "2>&1";
//proc.m_proc.m_runas = proc.m_host->m_user;
- //proc.m_proc.m_ulimit = "c:unlimited";
- m_proc.m_name.assfmt("%d-%d-%s", getpid(), name++, "test");
- m_proc.m_path.assign("/bin/sleep");
- m_proc.m_args = "600";
+ m_proc.m_ulimit = "c:unlimited";
+ if((rand() & 15) >= 0){
+ m_proc.m_name.assfmt("%d-%d-%s", getpid(), name++, "sleep");
+ m_proc.m_path.assign("/bin/sleep");
+ m_proc.m_args = "600";
+ } else {
+ m_proc.m_name.assfmt("%d-%d-%s", getpid(), name++, "test.sh");
+ m_proc.m_path.assign("/home/jonas/run/cpcd/test.sh");
+ m_proc.m_args = "600";
+ }
g_procs.push_back(m_proc);
Properties reply;