1. 2021-01-11:linux中,如何看內存的使用情況呢
1./proc/meminfo
查看 RAM 使用情況最簡單的方法是通過 /proc/meminfo。這個動態更新的虛擬文件實際上是許多其他內存相關工具 (如:free / ps / top) 等的組合顯示。/proc/meminfo 列出了所有你想了解的內存的使用情況。進程的內存使用信息也可以通過 /proc//statm 和 /proc//status 來查看。
$cat/proc/meminfo
圖0:Linux下查看內存使用情況方法總結
2.atop
atop 命令是一個終端環境的監控命令。它顯示的是各種系統資源(CPU, memory, network, I/O, kernel)的綜合,並且在高負載的情況下進行了彩色標注。
$sudoatop
3.free
free 命令是一個快速查看內存使用情況的方法,它是對 /proc/meminfo 收集到的信息的一個概述。
$free-h
4.GNOME System Monitor
GNOME System Monitor 是一個顯示最近一段時間內的 CPU、內存、交換區及網路的使用情況的視圖工具。它還提供了一種查看 CPU 及內存使用情況的方法。
$gnome-system-monitor
5.htop
htop 命令顯示了每個進程的內存實時使用率。它提供了所有進程的常駐內存大小、程序總內存大小、共享庫大小等的報告。列表可以水平及垂直滾動。
$htop
6.KDE System Monitor
功能同 4 中介紹的 GENOME 版本。
$ksysguard
7.memstat
memstat 是一個有效識別 executable(s), process(es) and shared libraries 使用虛擬內存情況的命令。給定一個進程 ID,memstat 可以列出這個進程相關的可執行文件、數據和共享庫。
$memstat-p
8.nmon
nmon 是一個基於 ncurses 的系統基準測試工具,它可以監控 CPU、內存、I/O、文件系統及網路資源等的互動模式。對於內存的使用,它可以實時的顯示總 / 剩餘內存、交換空間等信息。
$nmon
9.ps
ps 命令可以實時的顯示各個進程的內存使用情況。Reported memory usage information includes %MEM (percent of physical memory used), VSZ (totalamount of virtual memory used), and RSS (total amount of physical memory used)。你可以使用 「–sort」 選項對進程進行排序,例如按 RSS 進行排序:
$psaux–sort-rss
圖8:Linux下查看內存使用情況方法總結
10.smem
smem 命令允許你統計基於 / proc 信息的不同進程和用戶的內存使用情況。內存使用情況的分析可以導出圖表(如條形圖和餅圖)。
11.top
top 命令提供了實時的運行中的程序的資源使用統計。你可以根據內存的使用和大小來進行排序。
12.vmstat
vmstat 命令顯示實時的和平均的統計,覆蓋 CPU、內存、I/O 等內容。例如內存情況,不僅顯示物理內存,也統計虛擬內存。
2. 在linux 下怎麼查看伺服器的cpu和內存的硬體信息
以Linux centos 7伺服器為例,查看伺服器的cpu和內存的硬體信息方法如下:
1、滑鼠右鍵點擊桌面,選擇「打開終端」,如下圖所示。
3. Linux C 怎麼實現兩個線程同步讀取兩個內存的數據
在Linux系統中使用C/C++進行多線程編程時,我們遇到最多的就是對同一變數的多線程讀寫問題,大多情況下遇到這類問題都是通過鎖機制來處理,但這對程序的性能帶來了很大的影響,當然對於那些系統原生支持原子操作的數據類型來說,我們可以使用原子操作來處理,這能對程序的性能會得到一定的提高。那麼對於那些系統不支持原子操作的自定義數據類型,在不使用鎖的情況下如何做到線程安全呢?本文將從線程局部存儲方面,簡單講解處理這一類線程安全問題的方法。
一、數據類型
在C/C++程序中常存在全局變數、函數內定義的靜態變數以及局部變數,對於局部變數來說,其不存在線程安全問題,因此不在本文討論的范圍之內。全局變數和函數內定義的靜態變數,是同一進程中各個線程都可以訪問的共享變數,因此它們存在多線程讀寫問題。在一個線程中修改了變數中的內容,其他線程都能感知並且能讀取已更改過的內容,這對數據交換來說是非常快捷的,但是由於多線程的存在,對於同一個變數可能存在兩個或兩個以上的線程同時修改變數所在的內存內容,同時又存在多個線程在變數在修改的時去讀取該內存值,如果沒有使用相應的同步機制來保護該內存的話,那麼所讀取到的數據將是不可預知的,甚至可能導致程序崩潰。
如果需要在一個線程內部的各個函數調用都能訪問、但其它線程不能訪問的變數,這就需要新的機制來實現,我們稱之為Static memory local to a thread (線程局部靜態變數),同時也可稱之為線程特有數據(TSD: Thread-Specific Data)或者線程局部存儲(TLS: Thread-Local Storage)。這一類型的數據,在程序中每個線程都會分別維護一份變數的副本(),並且長期存在於該線程中,對此類變數的操作不影響其他線程。如下圖:
二、一次性初始化
在講解線程特有數據之前,先讓我們來了解一下一次性初始化。多線程程序有時有這樣的需求:不管創建多少個線程,有些數據的初始化只能發生一次。列如:在C++程序中某個類在整個進程的生命周期內只能存在一個實例對象,在多線程的情況下,為了能讓該對象能夠安全的初始化,一次性初始化機制就顯得尤為重要了。——在設計模式中這種實現常常被稱之為單例模式(Singleton)。Linux中提供了如下函數來實現一次性初始化:
#include <pthread.h>
// Returns 0 on success, or a positive error number on error
int pthread_once (pthread_once_t *once_control, void (*init) (void));
利用參數once_control的狀態,函數pthread_once()可以確保無論有多少個線程調用多少次該函數,也只會執行一次由init所指向的由調用者定義的函數。init所指向的函數沒有任何參數,形式如下:
void init (void)
{
// some variables initializtion in here
}
另外,參數once_control必須是pthread_once_t類型變數的指針,指向初始化為PTHRAD_ONCE_INIT的靜態變數。在C++0x以後提供了類似功能的函數std::call_once (),用法與該函數類似。使用實例請參考https://github.com/ApusApp/Swift/blob/master/swift/base/singleton.hpp實現。
4. Linux下調試編寫並調試C語言程序,怎麼查看它的內存和CPU信息GDB中可以實現嗎
內存和cpu是硬體的概念,在程序中只有被映射後的內存和線程/進程的概念,具體如何調度程序版的內存地址和線程權/進程的掛起和運行都是操作系統來做的。使用gdb能夠查看當前程序各個變數的內存數據內容此時的內存地址對程序員來說是沒什麼用的(除非是做硬體開發,可能會需要),gdb還能夠查看當前程序中那些線程被掛起或正在運行,但查詢不到當前線程在哪個cpu上運行。
5. 在linux中,如何使用c語言直接執行指定內存位置的代碼
這個……需要你非常清楚目的位置代碼的細節。舉個例子,無傳入值和返回值的話版,可以定義函數指針權void (*pfn)(),然後把pfn賦值為內存地址,調用(*pfn)()。我覺得這個問題最方便的還是在匯編下JMP過去。
6. 基本linux命令
Linux 對我們的生活產生了巨大的沖擊。至少你的安卓手機使用的就是 Linux 核心。盡管如此,在第一次開始使用 Linux 時你還是會感到難以下手。因為在 Linux 中,通常需要使用終端命令來取代 Windows 系統中的點擊啟動圖標操作。但是不必擔心,這里我們會介紹 10 個 Linux 基本命令來幫助你開啟 Linux 神秘之旅。
幫助新手走出第一步的 10 個 Linux 基本命令
當我們談論 Linux 命令時,實質上是在談論 Linux 系統本身。這短短的 10 個 Linux 基本命令不會讓你變成天才或者 Linux 專家,但是能幫助你輕松開始 Linux 之旅。使用這些基本命令會幫助新手們完成 Linux 的日常任務,由於它們的使用頻率如此至高,所以我更樂意稱他們為 Linux 命令之王!
讓我們開始學習這 10 條 Linux 基本命令吧。
1. sudo
這條命令的意思是「以超級用戶的身份執行」,是 SuperUserDo 的簡寫,它是新手將要用到的最重要的一條 Linux 命令。當一條單行命令需要 root 許可權的時候,sudo命令就派上用場了。你可以在每一條需要 root 許可權的命令前都加上sudo。
$ sudo su
2. ls
跟其他人一樣,你肯定也經常想看看目錄下都有些什麼東西。使用列表命令,終端會把當前工作目錄下所有的文件以及文件夾展示給你。比如說,我當前處在 /home 文件夾中,我想看看 /home 文件夾中都有哪些文件和目錄。
/home$ ls
在 /home 中執行ls命令將會返回類似下面的內容:
imad lost+found
3. cd
變更目錄命令(cd)是終端中總會被用到的主要命令。它是最常用到的 Linux 基本命令之一。此命令使用非常簡單,當你打算從當前目錄跳轉至某個文件夾時,只需要將文件夾鍵入此命令之後即可。如果你想跳轉至上層目錄,只需要在此命令之後鍵入兩個點 (..) 就可以了。 舉個例子,我現在處在 /home 目錄中,我想移動到 /home 目錄中的 usr 文件夾下,可以通過以下命令來完成操作。
/home $ cd usr
/home/usr $
4. mkdir
只是可以切換目錄還是不夠完美。有時候你會想要新建一個文件夾或子文件夾。此時可以使用 mkdir 命令來完成操作。使用方法很簡單,只需要把新的文件夾名跟在 mkdir 命令之後就好了。
~$ mkdir folderName
5. cp
拷貝-粘貼-and-paste是我們組織文件需要用到的重要命令。使用 cp命令可以幫助你在終端當中完成拷貝-粘貼操作。首先確定你想要拷貝的文件,然後鍵入打算粘貼此文件的目標位置。
$ cp src des
注意:如果目標目錄對新建文件需要 root 許可權時,你可以使用 sudo命令來完成文件拷貝操作。
6. rm
rm 命令可以幫助你移除文件甚至目錄。如果不希望每刪除一個文件都提示確認一次,可以用-f參數來強制執行。也可以使用-r參數來遞歸的移除文件夾。
$ rm myfile.txt
7. apt-get
這個命令會依據發行版的不同而有所區別。在基於 Debian 的發行版中,我們擁有 Advanced Packaging Tool(APT)包管理工具來安裝、移除和升級包。apt-get 命令會幫助你安裝需要在 Linux 系統中運行的軟體。它是一個功能強大的命令行,可以用來幫助你對軟體執行安裝、升級和移除操作。
在其他發行版中,例如 Fedora、Centos,都各自不同的包管理工具。Fedora 之前使用的是 yum,不過現在 dnf 成了它默認的包管理工具。
$ sudo apt-get update
$ sudo dnf update
8. grep
當你需要查找一個文件,但是又忘記了它具體的位置和路徑時,grep命令會幫助你解決這個難題。你可以提供文件的關鍵字,使用grep命令來查找到它。
$ grep user /etc/passwd
9. cat
作為一個用戶,你應該會經常需要瀏覽腳本內的文本或者代碼。cat命令是 Linux 系統的基本命令之一,它的用途就是將文件的內容展示給你。
$ cat CMakeLists.txt
10. poweroff
最後一個命令是 poweroff。有時你需要直接在終端中執行關機操作。此命令可以完成這個任務。由於關機操作需要 root 許可權,所以別忘了在此命令之前添加sudo。
$ sudo poweroff
總結
如我在文章開始所言,這 10 條命令並不會讓你立即成為一個 Linux 大拿,但它們會讓你在初期快速上手 Linux。以這些命令為基礎,給自己設置一個目標,每天學習一到三條命令,這就是此文的目的所在。
7. linux c/c++ 如何實現應用程序啟動後獲取20M內存,要求如下:
我覺得你的要求有一個函數完全可以滿足你~
直接文件映射到內存就內可以了~
http://ke..com/view/1499209.htm
你參容考下mmap這個函數~它可以將一個文件的內容映射到固定的地址(虛擬地址)上去。
程序退出時執行unmmap將內存中的內容同步到文件中去.
所以程序的要求就很簡單了~一個空的20M大小的文件,剩下的就是使用mmap了~~
8. 怎麼用C語言編程獲取Linux硬碟容量大小
system(執行shell命令)相關函數fork,execve,waitpid,popen表頭文件#include定義函數intsystem(constchar*string);函數說明system()會調用fork()產生子進程,由子進程來調用/bin/sh-cstring來執行參數字元串所代表的命令,此命令執行完後隨即返回原調用的進程。在調用system()期間SIGCHLD信號會被暫時擱置,SIGINT和SIGQUIT信號則會被忽略。返回值如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數string為空指針(NULL),則返回非零值。如果system()調用成功則最後會返回執行shell命令後的返回值,但是此返回值也有可能為system()調用/bin/sh失敗所返回的127,因此最好能再檢查errno來確認執行成功。附加說明在編寫具有SUID/SGID許可權的程序時請勿使用system(),system()會繼承環境變數,通過環境變數可能會造成系統安全的問題。範例#includemain(){system(「ls-al/etc/passwd/etc/shadow」);}執行-rw-r--r--1rootroot705Sep313:52/etc/passwd-r---------1rootroot572Sep215:34/etc/shadow
9. unix/linux下通過c/c++獲取內存大小的方法。
參考ps或top的源碼,這些都是開源的