⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 09 - killing all processes for a given user.rb

📁 O Reilly Ruby Cookbook source code
💻 RB
字号:
#!/usr/bin/ruby -w# banish.rbdef signal_all(username, signal)  lookup_uid(username)  killed = 0  %x{ps -U #{username}}.each_with_index do |proc, i|    next if i == 0 # Skip the header provided by ps    pid = proc.split[0].to_i    begin      Process.kill(signal, pid)    rescue SystemCallError => e      raise e unless e.errno == Errno::ESRCH    end    killed += 1  end  return killedend#---def lookup_uid(username)  require 'etc'  begin    user = Etc.getpwnam(username)  rescue ArgumentError    raise ArgumentError, "No such user: #{username}"  end  return user.uidend#---require 'optparse'signal = "SIGTERM"opts = OptionParser.new do |opts|  opts.banner = "Usage: #{__FILE__} [-9] [USERNAME]"  opts.on("-9", "--with-extreme-prejudice",          "Send an uncatchable kill signal.") { signal = "SIGKILL" }endopts.parse!(ARGV)if ARGV.size != 1  $stderr.puts opts.banner  exitendusername = ARGV[0]if username == 'root'  $stderr.puts "Sorry, killing all of root's processes " +               "would bring down the system."  exitendputs "Killed #{signal_all(username, signal)} process(es)."#---$ ./banish.rb peon5 process(es) killed#---def signal_all(username, signal)  uid = lookup_uid(username)  require 'sys/proctable'  killed = 0  Sys::ProcTable.ps.each do |proc|    if proc.uid == uid      begin        Process.kill(signal, proc.pid)      rescue SystemCallError => e        raise e unless e.errno == Errno::ESRCH      end      killed += 1    end  end  return killedend#---

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -