从linux中的进程中释放内存?

时间:2018-02-08 10:52:19

标签: linux memory-management memory-leaks htop pmap

当我运行时pmap <pid>它正在给我下面的列表

 00007f545bbc5000   1016K rw---    [ anon ]
 00007f545bd0c000     76K r-x--  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libjniswscale.so
 00007f545bd1f000   2044K -----  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libjniswscale.so
 00007f545bf1e000      4K rw---  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libjniswscale.so
 00007f545c1bc000     52K r-x--  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libjniswresample.so
 00007f545c3ca000     12K -----    [ anon ]
 00007f545c3cd000   1016K rw---    [ anon ]
 00007f545c4cd000   2048K rw---    [ anon ]
 00007f545c6cd000     12K -----    [ anon ]
 00007f545c6d0000   1016K rw---    [ anon ]
 00007f545c812000   1676K r--s-  /opt/openmrs/lucene/indexes/org.openmrs.PersonAttribute/_1y_Lucene41_0.pos
 00007f545c9b5000    108K r-x--  /opt/openmrs/.openmrs-lib-cache/bahmnimsf/org/bytedeco/javacpp/linux-x86_64/libswresample.so.2
 00007f545cbd2000     12K -----    [ anon ]
 00007f545cbd5000   1016K rw---    [ anon ]

当我执行命令时,我可以看到一个进程的详细信息。但, 这里[anon]正在记忆中。我可以释放那段记忆吗?

这里我不想杀死这个过程。只是想从这个过程中释放内存。

提前致谢

1 个答案:

答案 0 :(得分:1)

这取决于你的意思。最有可能的答案是否定的,因为这是给定过程的不同部分的内存消耗列表。您通常对这些部件没有影响力。 [ anon ]只是意味着此部分没有可以显示的特定名称,因此它被声明为匿名。 (它可能是该过程的主要程序,而不是该过程中使用的某些库。)

释放内存的唯一方法是结束这个过程,无论是通过促使它终止(可能是通过GUI)还是发送信号(例如通过kill (1))。

从外部释放内存的任何其他方式(对于没有接口,但是可能能够使用调试器或类似的方式执行此操作)将意味着插入正在运行的进程。这是不可取的。该过程迟早会访问它分配的内存。如果不再分配,则会发送一个SEGFAULT,因此通常会终止。

话虽如此,可能是您正在考虑更改程序以分配更少的内存。在这种情况下,问题太过广泛,并且会严重依赖于您正在查看的程序。