gpt4 book ai didi

go - 如何中断系统调用

转载 作者:行者123 更新时间:2023-12-01 21:13:04 31 4
gpt4 key购买 nike

我有一个Go服务,可以从NFS / GPFS卷中进行大量读取。我偶尔会遇到大规模问题,在此期间基础安装无法响应特定的syscall,导致整个服务被内核删除:

[98549.941930]       Tainted: G           O    4.14.13-1.el7.elrepo.x86_64 #1
[98549.942454] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[98549.943422] ls D 0 14884 1 0x00000084
[98549.943968] Call Trace:
[98549.944498] __schedule+0x28d/0x880
[98549.945033] schedule+0x36/0x80
[98549.945552] schedule_preempt_disabled+0xe/0x10
[98549.946095] __mutex_lock.isra.5+0x269/0x500
[98549.946611] __mutex_lock_slowpath+0x13/0x20
[98549.947153] mutex_lock+0x2f/0x40
[98549.947695] fuse_lock_inode+0x2a/0x30 [fuse]
[98549.948248] fuse_readdir+0x113/0x7e0 [fuse]
[98549.948795] iterate_dir+0x16e/0x190
[98549.949323] ? __audit_syscall_entry+0xaf/0x100
[98549.949847] SyS_getdents+0x98/0x120
[98549.950358] ? iterate_dir+0x190/0x190
[98549.950898] do_syscall_64+0x67/0x1b0
[98549.951410] entry_SYSCALL64_slow_path+0x25/0x25
[98549.951948] RIP: 0033:0x7ffff749dcb5
[98549.952454] RSP: 002b:00007fffffffd160 EFLAGS: 00000246 ORIG_RAX: 000000000000004e
[98549.953423] RAX: ffffffffffffffda RBX: 00000000006260a0 RCX: 00007ffff749dcb5
[98549.953985] RDX: 0000000000008000 RSI: 00000000006260a0 RDI: 0000000000000005
[98549.954518] RBP: 00000000006260a0 R08: 0000000000000080 R09: 0000000000008030
[98549.955131] R10: 00007fffffffced0 R11: 0000000000000246 R12: fffffffffffffe90
[98549.955655] R13: 0000000000000000 R14: 0000000000626030 R15: 0000000000626000
我正在寻找一种添加超时的方法,以使没有任何一个失败的syscall可以关闭整个服务,但是找不到在Go中执行此操作的好方法。
我发现一种常见的设计是从OS线程运行系统调用,并在超时时终止该线程,但是由于缺乏对底层系统线程的控制,Golang似乎不太可能。该服务通常并行执行大量的系统调用(可能数百个)。

最佳答案

您可以使用sycall包获取过程的pid

pid, _, _ := syscall.Syscall(syscall.SYS_GETPID, 0, 0, 0)
后者通过pid终止进程
select {
case end = <-endSignal:
fmt.Println("The end!")
case <-time.After(5 * time.Second):
proc, _ := os.FindProcess(pid)
// Kill the process
proc.Kill()
}

关于go - 如何中断系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62692137/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com