Golang程序  |  30行  |  593 B

// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build linux

package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"os"
	"syscall"
)

func gettid() int {
	return syscall.Gettid()
}

func tidExists(tid int) (exists, supported bool) {
	stat, err := ioutil.ReadFile(fmt.Sprintf("/proc/self/task/%d/stat", tid))
	if os.IsNotExist(err) {
		return false, true
	}
	// Check if it's a zombie thread.
	state := bytes.Fields(stat)[2]
	return !(len(state) == 1 && state[0] == 'Z'), true
}