Thanks Kurtis for the reply. I understand defunct process mechanism. As I mentioned in the initial mail, [Correct me if I am wrong here], In a process if there is main thread and a detached thread created by main thread, when the main thread exits the process is kept in defunct state, since the created thread is still executing, I was thinking if we have such scenario in go runtime. That could be the reason I see this thread is waiting on futex and holding the file handles and causing the go process (kernel) not to send SIGCHLD to parent process.
For example below case #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h> void *thread_function(void *args) { printf("The is new thread! Sleep 20 seconds...\n"); sleep(100); printf("Exit from thread\n"); pthread_exit(0); } int main(int argc, char **argv) { pthread_t thrd; pthread_attr_t attr; int res = 0; res = pthread_attr_init(&attr); res = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); res = pthread_create(&thrd, &attr, thread_function, NULL); res = pthread_attr_destroy(&attr); printf("Main thread. Sleep 5 seconds\n"); sleep(5); printf("Exit from main process\n"); pthread_exit(0); } ujonnala@ ~/mycode/go () $ ps -T PID SPID TTY TIME CMD 43635 43635 pts/29 00:00:00 a.out <defunct> 43635 43638 pts/29 00:00:00 a.out Due to the detached thread still executing the process left in defunt state. Thanks for checking on this, I will see if we can reproduce my situation on a newer kernel. Thanks & Regards, Uday Kiran On Thursday, September 10, 2020 at 9:49:06 PM UTC-7 Kurtis Rader wrote: > On Thu, Sep 10, 2020 at 9:25 PM Uday Kiran Jonnala <juday...@gmail.com> > wrote: > >> Thanks for the reply. We are fixing the issue. But the point I wanted to >> bring it up here is the issue of a thread causing the go process to be in >> defunct state. >> > > Any thread can cause the go process to enter the "defunct" state. For > example, by calling os.Exit(), or panic(), or causing a signal to be > delivered that terminates the process (e.g., SIGSEGV). > > >> My kernel version is >> Linux version 4.14.175-1.nutanix.20200709.el7.x86_64 (dev@ca4b0551898c) >> (gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)) #1 SMP Fri Jul 10 >> 02:17:54 UTC 2020 >> > > Is that the output of `uname -a`? It seems to suggest you're using CentOS > provided by the https://www.nutanix.com/go/linux-on-ahv cloud > environment. So we've established you are using Linux with kernel version > 4.14. A kernel that is now three years old. I don't have anything like it > installed on any of my virtual machines so I can't explore how it handles > defunct processes. But my prior point stands: A "defunct" process is one > that has been terminated but whose parent process has not reaped its exit > status. Either that parent process has a bug (the most likely explanation) > or your OS has a bug. > > -- > Kurtis Rader > Caretaker of the exceptional canines Junior and Hank > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/ad4843e1-f7d1-43ae-8091-579bc61527fdn%40googlegroups.com.