Variables de prioridad y entorno en Linux (requerido para principiantes)

contenido

1. Prioridad del proceso

2. Variables de entorno

1. Conceptos básicos de variables de entorno y variables de entorno comunes

 2. ¿Por qué necesitamos variables de entorno?

3. Cómo se organizan las variables de entorno

4. Comandos comunes para variables de entorno

 5. Cómo se organizan las variables de entorno

 6. Propiedades globales de las variables de entorno


1. Prioridad del proceso

¿Cuál es la prioridad de un proceso? En nuestra vida diaria, tenemos prioridades en todas partes, por ejemplo, ¿necesitamos hacer cola cuando estamos haciendo cola para comer en el comedor, y la persona que está frente a nosotros tiene una prioridad más alta que nosotros? Entonces, ¿por qué necesita prioridad? En esencia, hay muy pocos recursos, si hay muchas ventanas en la cantina, no necesitamos hacer cola. Los procesos también tienen prioridad bajo Linux. Echemos un vistazo al concepto de prioridad del proceso:

1. El orden de asignación de recursos de la CPU se refiere a la prioridad del proceso.
2. Los procesos con prioridad alta tienen prioridad para ejecutarse. Configurar la prioridad del proceso es útil para Linux en un entorno multitarea y puede mejorar el rendimiento del sistema. También puede ejecutar el proceso en la CPU especificada, de modo que el proceso sin importancia se pueda organizar en una determinada CPU, lo que puede mejorar en gran medida el rendimiento general del sistema.

 

Cómo verificar la prioridad de un proceso: comando ps ps -al:

 Aquí hay algunos datos importantes para explicar:

1.UID: representa la identidad del ejecutor

2.PID: representa el nombre en clave del proceso 3.PPID: representa de qué proceso
se deriva el proceso, es decir, el nombre en clave del proceso padre PRI: representa la prioridad del proceso que se puede ejecutar, cuanto menor sea valor, el anterior Ejecutado
4.NI: representa el buen valor de este proceso

PRI suma NI

1. PRI también es relativamente fácil de entender, es decir, la prioridad del proceso, o el orden en que la CPU ejecuta el programa. Cuanto menor sea el valor, mayor será la prioridad del proceso.
2. ¿Qué pasa con NI? ?Cuanto menor sea el valor de PRI, más rápido se ejecutará.Después de agregar el valor agradable, el PRI se convertirá en: PRI (nuevo) = PRl (antiguo) + agradable. De esta forma, cuando el valor de Niza sea negativo, el valor de prioridad del programa será menor, es decir, su prioridad será mayor y más rápido se ejecutará, por lo tanto, ajustar la prioridad del proceso, en Linux, es Ajustar el proceso agradable valor agradable, cuyo rango de valores es de -20 a 19, un total de 40 niveles.

 

Modifique la prioridad del proceso: después de que la parte superior
ingrese a la parte superior, presione "r" -> ingrese el PID del proceso -> ingrese el valor agradable

 Varios conceptos importantes:

1. Competitividad: hay una gran cantidad de procesos del sistema, pero solo una pequeña cantidad de recursos de CPU, o incluso uno, por lo que los procesos son competitivos. Para completar la tarea de manera eficiente y competir por los recursos relacionados de manera más razonable, tiene una prioridad.
2. Independencia: la operación multiproceso requiere acceso exclusivo a varios recursos y no interfiere entre sí durante la operación multiproceso.

3. Paralelo: Múltiples procesos se ejecutan por separado bajo múltiples CPU y se ejecutan al mismo tiempo, lo que se denomina paralelismo.
4. Simultaneidad: los procesos múltiples utilizan el cambio de procesos bajo una CPU y, dentro de un período de tiempo, se pueden avanzar varios procesos, lo que se denomina simultaneidad.

2. Variables de entorno

1. Conceptos básicos de variables de entorno y variables de entorno comunes

·Las variables de entorno generalmente se refieren a algunos parámetros utilizados en el sistema operativo para especificar el entorno operativo del sistema operativo.

Por ejemplo: cuando generalmente escribimos código c o c ++, al vincular archivos de objetos, nunca sabemos dónde están cuando se incluyen archivos de encabezado, pero aún podemos formar programas ejecutables, porque hay variables de entorno relacionadas para ayudar. El compilador realiza una búsqueda.

Cuando definimos variables en lenguaje c o c++, por ejemplo, definimos una variable entera int a=10, la variable tiene el nombre y el contenido de la variable, la misma variable de entorno también tiene el nombre de la variable y el contenido de la variable. Es decir , variable de entorno = nombre de variable + contenido.

Cómo ver las variables de entorno:

echo $NOMBRE (NOMBRE: nombre de la variable de entorno)

Ejemplo:

 2. ¿Por qué necesitamos variables de entorno?

Para comodidad de los usuarios, los desarrolladores y los sistemas realizan algunos de los problemas más simples de búsqueda, localización y confirmación.

Puede encontrar que no necesitamos especificar la ruta cuando usamos las instrucciones ls pwd cd, pero ¿necesitamos traer la ruta cuando ejecutamos nuestros propios programas?

 Necesitamos que el sistema encuentre ./mytest, lo que significa que la función de ./ es encontrar mytest, entonces, ¿por qué los comandos ls no necesitan una ruta? Primero, verifiquemos la variable de entorno PATH:

 De la figura anterior, podemos saber que la ruta del comando ls está escrita en la variable de entorno, por lo que cuando usamos la variable de entorno, el sistema buscará la existencia de la variable de entorno PATH. se ejecutará y se informará de un error si no se encuentra.

Entonces, ¿también podemos ser ejecutados por el sistema sin especificar la ruta como ls pwd? Por supuesto, hay dos métodos.

Método 1: Copie la ruta del programa directamente a la ruta del usuario/bin y será permanentemente válida (pero no se recomienda encarecidamente contaminar el conjunto de comandos del sistema Linux)

Método 2: exportar PATH=$PARH: ruta. (Se producirá un error después de apagar xsell)

 De esta forma, se puede ejecutar sin especificar la ruta como ls:

 Comandos relacionados para variables de entorno:

1. echo: muestra el valor de una variable de entorno

2.exportar: establecer una nueva variable de entorno

3.env: muestra todas las variables de entorno
4.unset: borra las variables de entorno
5.set: muestra variables de shell y variables de entorno definidas localmente

 

3. Cómo se organizan las variables de entorno

Cuando usamos el comando ls podemos usar diferentes opciones para mostrar otras funciones. ¿Cómo usa ls tal función? De hecho, la función principal en C y C++ usa parámetros, pero no la escribimos en tiempos normales. El prototipo es el siguiente:

int main(int argc ,char*argv[],char*env[]); donde el primer parámetro se refiere a la cantidad de listas de parámetros. Cuando no pasamos comandos, el valor predeterminado es 1 y el segundo parámetro es un puntero Array, que almacena un puntero de tipo char*, apunta a cadenas, y estas cadenas corresponden a diferentes parámetros. El tercer parámetro es una variable de entorno.

 Lo siguiente se demuestra mediante un fragmento de código:

    1.#include<iostream>
    2 using namespace std;
    3 int main(int argc ,char*argv[],char*env[])
    4 {
    5      for(int i=0;i<argc;i++)
    6      {
    7        cout<<argv[i]<<endl;                                                                                                                               
    8      }               
    9      return 0;       
   10 }                    
                        

Ejecutamos este programa:

 Veamos un fragmento de código a continuación.


    1 #include<string>
    2 #include<iostream>
    3 using namespace std;
    4 int main(int argc,char*argv[],char*env[])
    5 {
    6   for(int i=0;i<argc;i++)
    7   {
    8     cout<<"argv["<<i<<"]"<<":"<<argv[i]<<endl;
    9   }
   10   string str="-a";
   11   string str2="-b";
   12   if(argc<2)
   13   {
   14     cout<<"请输入命令行参数"<<endl;
   15   }
   16   else if(argv[1]==str)
   17   {
   18     cout<<"I am -a"<<endl;
   19   }
   20   else if(argv[1]==str2)
   21   {
   22     cout<<"I am a -b"<<endl;
   23   }
   24   else
   25   {
   26     cout<<"输入错误"<<endl;
   27   }                                                                                                                                                       
   28   return 0;
   29 
   30 }
  ~
  ~

Ejecutamos este programa:

 De esta manera, podemos entender aproximadamente que los comandos ls y cd pueden mostrar diferentes contenidos según diferentes opciones.La esencia es obtener los parámetros de la línea de comando en el programa y luego hacer sus propios juicios para lograr diferentes funciones.

4. Comandos comunes para variables de entorno

1. echo: muestra el valor de una variable de entorno

 

2.exportar: establecer una nueva variable de entorno

 

3.env: muestra todas las variables de entorno


4.unset: borrar variables de entorno


5.set: Mostrar variables de entorno y variables de shell definidas localmente

 5. Cómo se organizan las variables de entorno

1. Cada programa recibe una tabla de entorno, que es una matriz de punteros de caracteres, cada puntero apunta a una cadena de entorno terminada en '\0'.

 ¿Cómo obtener variables de entorno? Mencionamos los tres parámetros de la función principal arriba, que podemos obtener con la ayuda de los parámetros de la función principal. Por favor vea el código a continuación:

    1 #include<string>
    2 #include<iostream>
    3 using namespace std;
    4 int main(int argc,char*argv[],char*env[])
    5 {
    6   for(int i=0;env[i];i++)
    7   {
    8     cout<<env[i]<<endl;//打印环境变量                                                                                                                     
    9   }                                        
   10   return 0;                                
   11                                            
   12 }                    

Ejecutamos este programa:

 ¿Hay alguna otra manera? Tal vez muchos hierros viejos digan que no quiero pasar los parámetros. En este momento, podemos obtenerlo a través del entorno de variables de terceros: consulte el código para obtener más detalles:

  1 #include<string>  
  2 #include<iostream>  
  3 using namespace std;  
  4 int main()  
  5 {  
  6   extern char** environ;//通过第三方变量获取环境变量                                                                                                        
  7   for(int i=0;environ[i];i++)               
  8   {                                         
  9     cout<environ[i]<<endl;                  
 10                                             
 11   }                                         
 12                                             
 13   return 0;                                 
 14 }                                           
~                                               
~                            

 De la misma manera, también podemos obtener las variables de entorno, pero encontramos que obtenemos todas las variables de entorno de esta manera. Si queremos encontrar variables de entorno específicas, tenemos que encontrarlas una por una. De hecho, hay una mejor manera a través de getenv;

 

#incude<stdlib.h>  
#include<string>  
  2 #include<iostream>  
  3 using namespace std;  
  4 int main()  
  5 {  
  6   cout<<getenv("PATH");                                                                                                                                     
  7   return 0;                                                                                                                      
  8 }                   

 

  6. Propiedades globales de las variables de entorno

Las variables de entorno suelen tener propiedades globales y pueden ser heredadas por procesos secundarios.

Veamos un ejemplo:

  1.#include<stdlib.h>                                                                                                                                          
  2 #include<iostream>                   
  3 using namespace std;                 
  4 int main()                           
  5 {                                    
  6   char* tmp=getenv("MYENV");         
  7   if(tmp)                            
  8   {                                  
  9     cout<<tmp<<endl;                 
 10   }                                  
 11                                      
 12   return 0;                          
 13 }                     

La primera ejecución no tiene ningún resultado. Esto se debe a que MYENV es una variable local. La segunda vez que se exporta la variable de entorno MYENV a través del proceso principal, ejecutamos de nuevo:

 

¿Por qué el proceso secundario también puede obtener esta variable de entorno? Esto se debe a que el proceso secundario se basará en la variable de entorno del proceso principal bash, y la creación del proceso secundario toma el proceso principal como plantilla

Resumen: las variables de entorno tienen propiedades globales porque pueden ser heredadas por procesos secundarios.

Supongo que te gusta

Origin blog.csdn.net/qq_56999918/article/details/123857602
Recomendado
Clasificación