我有一个以user1身份运行的Perl脚本。此脚本主要用于在RHEL上停止/启动或退回作为user2运行的进程。 现在,停止/启动正在工作,因为我正在使用user2的warpper来运行停止/启动和退回命令。
问题是,这个过程是一个通常很忙的jvm。因此,如果jvm真的很忙,停止/启动或弹跳将不会一直工作。所以我试图使用kill -9杀死processid以更快地反弹。
那么,我可以在运行为user1的Perl脚本中间对user2或root执行sudo来杀死-9进程。
我尝试使用
su - user2 -c `kill -9 pid`;
sudo -u user2 -c `kill -9 pid`;
所以我的停止/启动/退回脚本正在以user1身份运行。正在停止/启动/退回的进程以user2身份运行。 如果停止/开始/反弹超过30秒,我希望我的Perl脚本能够终止进程。
请帮忙。
答案 0 :(得分:1)
如果您无法使用visudo修复sudoers文件,那么Expect模块是一个选项:
#!/usr/bin/perl
use Expect;
# Get the password when your program starts
my $pw = <>;
# ... do stuff ...
# use the password when you need it
my $exp = Expect->spawn("/usr/bin/sudo", "-k", "-u", "user2", "kill", "-9", $pid);
print("expecting the prompt\n");
$exp->expect(undef, "-re", "Password:", sub { print("prompt matched\n"); $exp->send($pw); exp_continue; });
$exp->soft_close();
但是,说真的,最好的办法是把适当的条目放在sudoers中。