Rumah  >  Artikel  >  Tutorial sistem  >  Cangkang dan proses Linux

Cangkang dan proses Linux

WBOY
WBOYasal
2024-06-12 22:46:30730semak imbas

Linux之shell 和进程

Jalankan beberapa arahan di sini dahulu:

Cetak ID proses log masuk (yang sentiasa wujud sehingga log masuk dan keluar)

george.guo@ls:~$ echo $PPID
3411
george.guo@ls:~$ ps -aux | grep 3411
george.+ 3411 0.0 0.0 99004 4520 ? S 11:00 0:00 sshd: george.guo@pts/46

Cetak proses shell yang dicabang oleh proses log masuk (sentiasa wujud sehingga log masuk dan keluar)

george.guo@ls:~$ echo $$
3412
george.guo@ls:~$ ps -aux | grep 3412
george.+ 3412 0.5 0.0 21380 5120 pts/46 Ss 11:00 0:00 -bash

Seperti yang dapat dilihat daripada arahan di atas:

ID proses log masuk ialah 3411, yang mencipta subproses bash shell 3412. Pelaksanaan skrip masa hadapan,

3412 Kami memanggilnya shell utama di sini, yang akan memulakan proses subkulit untuk memproses skrip.

(Nota: Dalam bash, PID proses subkulit disimpan dalam pembolehubah khas '$$' dan PPID menyimpan ID proses induk subkulit.)

Mari kita tulis dua program kecil untuk mengesahkan:

george.guo@ls:~$ kucing ya.c

#include 
#include 
#include <sys/types.h>
#include 

int main()
{
        pid_t pid;
        pid_t ppid;

        pid = getpid();
        ppid = getppid();
        system("./test");       //system will fork a process for exec ./test
        printf("yes pid = %d, yes ppid =  %d\n", pid, ppid);
}

george.guo@ls:~$ ujian kucing

#!/bin/bash
echo "PID of this script: $$"
echo "test's PPID(system's fork id) = $PPID"
echo "tests's pid = $$"

Hasil larian adalah seperti berikut:

george.guo@ls~$ ./yes

PID of this script: 6082
tests PPID(system's fork id)= 6081
echo tests self pid is 6082
yes PID = 6080, yes PPID = 3412

Dapat dilihat bahawa ID proses induk bagi proses yes ialah 3412, iaitu proses anak shell bash bagi fork proses log masuk dan shell utama. Ini kerana

ya dilaksanakan oleh shell utama. ya ID proses ialah 6080, sistem panggilan, fork dan ID subkulit ialah 6081.

Untuk panggilan sistem:

Menggunakan system() untuk menjalankan arahan memerlukan mencipta sekurang-kurangnya dua proses. Satu untuk menjalankan shell (di sini IDnya ialah 6081),

Satu lagi atau lebih digunakan untuk arahan yang dilaksanakan oleh shell (di sini adalah subkulit, iaitu ujian skrip itu sendiri).

ID proses ujian skrip itu sendiri ialah 6082.

Atas ialah kandungan terperinci Cangkang dan proses Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn