gpt4 book ai didi

linux - 如何更改进程名称?

转载 作者:太空狗 更新时间:2023-10-29 12:18:14 27 4
gpt4 key购买 nike

有谁知道如何更改top中的进程名称?

top - 05:02:47 up 182 days, 10:38,  1 user,  load average: 14.53, 13.11, 11.95
Tasks: 4 total, 2 running, 2 sleeping, 0 stopped, 0 zombie
Cpu(s): 57.2%us, 14.8%sy, 0.0%ni, 26.2%id, 1.3%wa, 0.0%hi, 0.5%si, 0.0%st
Mem: 24736852k total, 22519688k used, 2217164k free, 132268k buffers
Swap: 8386552k total, 741900k used, 7644652k free, 12416224k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6230 user 20 0 47540 6856 1164 R 41.5 0.0 0:03.10 perl
6430 user 20 0 14900 1156 936 R 0.3 0.0 0:00.02 top
6227 user 20 0 47276 7552 2088 S 0.0 0.0 0:00.07 perl
14577 user 20 0 11588 1808 1340 S 0.0 0.0 0:00.46 bash

我想出了如何更改 top -c 名称$0 = '新名字。';然而,这并没有实现我的目标。

我发现了一个非标准模块,看起来很有前途,但是我不能使用任何非标准模块。

http://metacpan.org/pod/Sys::Prctl

# instead of "perl helloworld.pl"
$0 = "helloworld"
prctl_name("helloworld");

我希望有人能提供一些关于更改流程标题/名称的意见或知识。

我觉得我已经相当彻底地了解了 perlvar,但是我可能错过了一个简单的 $^0。希望就这么简单。

编辑

@user2783897,不知道为什么我没有想到,这是我做的基本示例。

sub prctl_name {
my $TASK_COMM_LEN = 16;
my $SYS_prctl = 157;
my $SYS_PR_SET_NAME = 15;
my $SYS_PR_GET_NAME = 16;

my ($str) = @_;

if(defined $str) {
my $rv = prctl($SYS_PR_SET_NAME, $str);
if($rv == 0) {
return 1;
} else {
return;
}

} else {
$str = "\x00" x ($TASK_COMM_LEN + 1); # allocate $str
my $ptr = unpack( 'L', pack( 'P', $str ) );
my $rv = prctl($SYS_PR_GET_NAME, $ptr);
if($rv == 0) {
return substr($str, 0, index($str, "\x00"));
} else {
return;
}
}
}
sub prctl {
my $SYS_prctl = 157;
my ($option, $arg2, $arg3, $arg4, $arg5) = @_;
syscall($SYS_prctl, $option,
($arg2 or 0), ($arg3 or 0), ($arg4 or 0), ($arg5 or 0));
}

最佳答案

为什么不将 Sys/Prctl.pm 代码复制到您自己的文件中?只有几十行。

此外,大部分代码专门用于查找进程运行在哪种内核上,以选择合适的 SYS_prctl 参数。如果您知道自己在哪种内核上运行,则可以将代码精简到最基本的部分。

关于linux - 如何更改进程名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18943142/

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