All of lore.kernel.org
 help / color / mirror / Atom feed
From: kladit@t-online.de (Klaus Dittrich)
To: linux mailing-list <linux-kernel@vger.kernel.org>
Subject: kernel reports kill too late?
Date: Thu, 18 Nov 2004 12:30:16 +0100	[thread overview]
Message-ID: <20041118113016.GA32355@xeon2.local.here> (raw)

[-- Attachment #1: Type: text/plain, Size: 1262 bytes --]

With kernels newer 2.6.10.rc1-bk18 glibc nptl checks failed.

Now this is fixed (See lkml "Futex queue_me/get_user ordering")
another problem showed off.

I get spurious "Failed to kill test process: No child processes"
errors during nptl checks now.

Appended is a simple test-prog derived from glibc's check which
runs fine on 2.6.10.rc1-bk18 but failed most of the time with
newer kernels.

(Not beeing a guru at all) I interpret the results as a delay
or loss of the status of a killed process which happens only 
if this process runs a thread.
(Not calling sleep_mostly() as a thread works as expected.)

Further noteworthy: it happens not always.



Output on 2.6.10.rc1-bk18 
thread starts spinning
thread alive
try to kill pid 1436
killed after 4007 waitpid calls
killed by signal: status = 0

Output on 2.6.10.rc2-bk2
test 0 --------------------------------
thread starts spinning
thread alive
try to kill pid 32321
killed after 3389 waitpid calls
killed by signal: status = 0
test 1 --------------------------------
thread starts spinning
thread alive
try to kill pid 32323
killed after 17 waitpid calls
killed by signal: status = 138
Kill failed! waitpid returned -1

Both systems are smp 2xP4 and 2xP3.

Can anyone else see this?

--
Regards Klaus



[-- Attachment #2: 2waitpid-test.c --]
[-- Type: text/plain, Size: 1675 bytes --]

#include <sys/wait.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <pthread.h>


static void print_exit_status (int status) {

	if(WIFEXITED(status)) {
		printf("killed normal   : status = %d\n", WEXITSTATUS(status));
	} else if (WIFSIGNALED(status)) {
		printf("killed by signal: status = %d\n", WEXITSTATUS(status));
	}
}

static void * sleep_mostly (void * arg)
{
	printf("thread starts spinning\n");

	while (1) {
   		sleep (1);
		printf ("thread alive\n");
	}

	/* NOTREACHED */
  	return NULL;
}

static int do_fork (void)
{
	pid_t pid = fork ();
	
	if (pid == 0) { /* child */

		pthread_t th;
		int cr = pthread_create (&th, NULL, sleep_mostly, (void*)NULL);

		if (cr != 0) {
	    	fprintf (stderr, "Thread creation failed %s\n", strerror(cr));
			exit (1);
		}

		sleep(3);
		pthread_exit (NULL);
    } else  if (pid < 0) {
		fprintf (stderr, "Cannot fork!\n");
		exit (1);
	}	
	return pid;
}

static int test_wait_pid(void) {

	int pid = do_fork();

	sleep(2);
	fprintf (stderr, "try to kill pid %d\n", pid);
	kill (pid, SIGKILL);	

	int killed;
	int status;
	int n;

	for (n = 1; n < 9999; n++) {
		killed = waitpid (pid, &status, WNOHANG|WUNTRACED);
		if (killed != 0)
			break;
	}	

	fprintf (stderr, "killed after %d waitpid calls\n", n);
	print_exit_status(status);

	if (killed != 0 && killed != pid) {
		fprintf (stderr, "Kill failed! waitpid returned %d\n", killed);
		exit (1);
	}

  	return 0;
}

int main (int argc, char* argv[]) {

	int i = 0;
	do {
		printf ("test %d --------------------------------\n", i);
		test_wait_pid();
		i++;
	} while ( i < 10);
	return 0;
}

                 reply	other threads:[~2004-11-18 12:35 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20041118113016.GA32355@xeon2.local.here \
    --to=kladit@t-online.de \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.