get_process_mem 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/CHANGELOG.md +9 -1
- data/lib/get_process_mem.rb +3 -1
- data/lib/get_process_mem/darwin.rb +39 -29
- data/lib/get_process_mem/version.rb +1 -1
- data/test/get_process_mem_test.rb +10 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06a96e8d978fd95bcf546a1e5e8bbc01cc10635d50b2f87639eb9c1f8c7f4f76
|
4
|
+
data.tar.gz: 6c941ae4f0301ff698b9be4ba75597537ed3ae5a11bf9295ab81144ef8435047
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cdb2baad08676298249f006b12f0c61bd0fdc1e13902211e2e0c3ea965c39fee2edb2ad3d2ceb617dcf450738e765c60c7e748830d85c52b044fa0ad8a3c8db
|
7
|
+
data.tar.gz: 35d717cc39f85a902adaa8ea6028d969b40b89465bcc0d1578de4e97308fe890e77ce9ff06b68855253030b3ab26fa130e2e44be06b041368a39a4cb4bc300f8
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
##
|
1
|
+
## HEAD (unreleased)
|
2
|
+
|
3
|
+
## 0.2.7
|
4
|
+
|
5
|
+
- Native (faster) support for returning memory from different PIDs on mac (https://github.com/schneems/get_process_mem/pull/42)
|
6
|
+
|
7
|
+
## 0.2.6
|
8
|
+
|
9
|
+
- Support returning memory from different PIDs on mac (https://github.com/schneems/get_process_mem/pull/41)
|
2
10
|
|
3
11
|
## 0.2.5
|
4
12
|
|
data/lib/get_process_mem.rb
CHANGED
@@ -3,49 +3,59 @@ require 'ffi'
|
|
3
3
|
class GetProcessMem
|
4
4
|
class Darwin
|
5
5
|
extend FFI::Library
|
6
|
-
ffi_lib '
|
7
|
-
attach_function :mach_task_self, [], :__darwin_mach_port_t
|
8
|
-
attach_function :task_info,
|
9
|
-
[
|
10
|
-
:__darwin_mach_port_t,
|
11
|
-
:int, # return selector
|
12
|
-
:pointer, #pointer to task info
|
13
|
-
:pointer, #pointer to int (size of structure / bytes filled out)
|
14
|
-
],
|
15
|
-
:int
|
6
|
+
ffi_lib 'proc'
|
16
7
|
|
17
|
-
class IntPtr < FFI::Struct
|
18
|
-
layout :value, :int
|
19
|
-
end
|
20
8
|
|
21
9
|
class TaskInfo < FFI::Struct
|
22
|
-
layout
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
10
|
+
layout :pti_virtual_size, :uint64,
|
11
|
+
:pti_resident_size, :uint64,
|
12
|
+
:pti_total_user, :uint64,
|
13
|
+
:pti_total_system, :uint64,
|
14
|
+
:pti_threads_user, :uint64,
|
15
|
+
:pti_threads_system, :uint64,
|
16
|
+
:pti_policy, :int32,
|
17
|
+
:pti_faults, :int32,
|
18
|
+
:pti_pageins, :int32,
|
19
|
+
:pti_cow_faults, :int32,
|
20
|
+
:pti_messages_sent, :int32,
|
21
|
+
:pti_messages_received, :int32,
|
22
|
+
:pti_syscalls_mach, :int32,
|
23
|
+
:pti_syscalls_unix, :int32,
|
24
|
+
:pti_csw, :int32,
|
25
|
+
:pti_threadnum, :int32,
|
26
|
+
:pti_numrunning, :int32,
|
27
|
+
:pti_priority, :int32
|
28
|
+
|
28
29
|
end
|
29
30
|
|
30
|
-
|
31
|
-
|
31
|
+
|
32
|
+
attach_function :proc_pidinfo,
|
33
|
+
[
|
34
|
+
:int, #pid
|
35
|
+
:int, # flavour
|
36
|
+
:uint64, #arg, not needed for this selector
|
37
|
+
TaskInfo.by_ref, #output buffer
|
38
|
+
:int, #size of buffer
|
39
|
+
],
|
40
|
+
:int
|
41
|
+
|
42
|
+
|
43
|
+
PROC_PIDTASKINFO = 4 #from sys/proc_info.h
|
32
44
|
|
33
45
|
class << self
|
34
|
-
def resident_size
|
35
|
-
|
46
|
+
def resident_size(pid)
|
47
|
+
get_proc_pidinfo(pid)[:pti_resident_size]
|
36
48
|
end
|
37
49
|
|
38
50
|
private
|
39
51
|
|
40
|
-
def
|
52
|
+
def get_proc_pidinfo(pid)
|
41
53
|
data = TaskInfo.new
|
42
|
-
|
43
|
-
|
44
|
-
result = task_info(mach_task_self, MACH_TASK_BASIC_INFO, data, out_count)
|
45
|
-
if result == 0
|
54
|
+
result = proc_pidinfo(pid, PROC_PIDTASKINFO, 0, data, TaskInfo.size)
|
55
|
+
if result == TaskInfo.size
|
46
56
|
data
|
47
57
|
else
|
48
|
-
raise "
|
58
|
+
raise SystemCallError.new("proc_pidinfo returned #{result}", FFI.errno);
|
49
59
|
end
|
50
60
|
end
|
51
61
|
end
|
@@ -1,11 +1,20 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class GetProcessMemTest < Test::Unit::TestCase
|
4
|
-
|
5
4
|
def setup
|
6
5
|
@mem = GetProcessMem.new
|
7
6
|
end
|
8
7
|
|
8
|
+
def test_different_pid_returns_different_memory
|
9
|
+
pid = Process.spawn("tail -f Gemfile")
|
10
|
+
|
11
|
+
other_mem = GetProcessMem.new(pid)
|
12
|
+
assert @mem.kb > other_mem.kb
|
13
|
+
ensure
|
14
|
+
Process.kill('TERM', pid) if pid
|
15
|
+
Process.wait(pid) if pid
|
16
|
+
end
|
17
|
+
|
9
18
|
def test_seems_to_work
|
10
19
|
assert @mem.kb > 0
|
11
20
|
assert @mem.mb > 0
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: get_process_mem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Schneeman
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -93,7 +93,7 @@ homepage: https://github.com/schneems/get_process_mem
|
|
93
93
|
licenses:
|
94
94
|
- MIT
|
95
95
|
metadata: {}
|
96
|
-
post_install_message:
|
96
|
+
post_install_message:
|
97
97
|
rdoc_options: []
|
98
98
|
require_paths:
|
99
99
|
- lib
|
@@ -108,8 +108,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
requirements: []
|
111
|
-
rubygems_version: 3.
|
112
|
-
signing_key:
|
111
|
+
rubygems_version: 3.1.2
|
112
|
+
signing_key:
|
113
113
|
specification_version: 4
|
114
114
|
summary: Use GetProcessMem to find out the amount of RAM used by any process
|
115
115
|
test_files:
|