Module: Pryx::Background

Defined in:
lib/pryx/background.rb

Class Method Summary collapse

Class Method Details

.background?(pid = $$) ⇒ Boolean

如果是前台进程,则这个进程的组ID(pgid)一定会等于当前 terminal 的gid (tpgid) 否则,如果不等,那么就是后台进程。 system(“\cat /proc/#pid/stat |awk ‘$5==$8 1’”)

Returns:

  • (Boolean)


5
6
7
8
9
10
11
12
13
14
15
# File 'lib/pryx/background.rb', line 5

def self.background?(pid=$$)
  # 这个实现似乎有错, 因为针对 nohup 1.rb& 这种情况,返回为前台进程。
  # 执行 reverse 再处理,是因为要考虑文件名包含空格因素。例如:‘hello) (world’
  # ary = File.read("/proc/#{pid}/stat").split(' ').reverse
  # is_bg = (ary[46] != ary[48])

  # 这个实现依赖于一些 linux 下基本工具,但是准确
  is_bg = system("ps -e -o pid,pgid,tpgid |grep '^\s*#{pid}' |awk '$2==$3 {exit 1}'")

  is_bg && !$stdout.tty?
end

.foreground?(pid = $$) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/pryx/background.rb', line 17

def self.foreground?(pid=$$)
  not background?(pid)
end