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.

Reply via email to