[英]how show what program has been run the most times since the system was last rebooted in linux
[英]What is the most minimalistic way to run a program inside an OS?
通常,當我從 bash 啟動程序時,它會分叉 bash 並從中繼承許多東西,例如標准輸入、標准輸出。 有沒有其他方法來運行程序,沒有這樣的設置? 也許它明確地打開 fd 1,寫一些東西並關閉它?
我遇到了nohup
和disown
。 但是這兩個都從 bash 中分離出一個正在運行的進程,但最初該進程仍然繼承自 bash。 也許有一種方法可以啟動一個從無到有的進程?
我只是出於好奇而問這個,並沒有實際目的。 當一個程序在微控制器中運行時,它只是我們的程序在運行而沒有額外的設置(如果需要設置,用戶必須預先設置)。 同樣,有沒有一種方法,即使在存在操作系統的情況下,也可以運行所編程的內容,而無需任何設置?
我假設您使用的是 Linux。
在我的系統(Ubuntu 20.04 x86_64)上打印你看到的top -u root
:
PID PPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 0 root 20 0 170380 11368 6500 S 0.0 0.0 0:23.52 systemd
2 0 root 20 0 0 0 0 S 0.0 0.0 0:00.61 kthreadd
3 2 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 2 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 2 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
10 2 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
11 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_rude_
12 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_trace
13 2 root 20 0 0 0 0 S 0.0 0.0 0:04.48 ksoftirqd/0
14 2 root 20 0 0 0 0 I 0.0 0.0 1:28.82 rcu_sched
您會看到所有進程最終都從 PPID(父進程 ID)零繼承。
這個進程不是進程,它代表的是Linux 調度器。 然后 systemd (PID 1) 由 kernel 啟動,系統中的所有其他進程由 systemd 啟動。
在用戶級別top -u madfred
3371 1 madfred 20 0 19928 7664 6136 S 0.0 0.0 0:11.62 systemd
3372 3371 madfred 20 0 170404 2460 0 S 0.0 0.0 0:00.00 (sd-pam)
3379 3371 madfred 39 19 659828 16348 12500 S 0.0 0.0 0:02.38 tracker-miner-f
3402 3371 madfred 20 0 8664 5112 3412 S 0.0 0.0 0:00.94 dbus-daemon
3407 3371 madfred 20 0 239712 6740 6064 S 0.0 0.0 0:00.03 gvfsd
有一個user systemd
由root systemd
啟動並以用戶身份運行。 該用戶 systemd 負責為該用戶啟動每個進程。
這對於確保 Linux 操作系統提供的所有保證是必要的,例如安全性、memory 保護、文件資源等。
您想要的是用其他東西替換 kernel,這是很有可能的。 檢查例如:
https://wiki.osdev.org/Bare_bones
https://github.com/contiki-ng/contiki-ng
用您自己的自定義初始化程序替換 systemd(或舊的 /sbin/init)非常容易。 檢查這個答案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.