Il comando completo che desideri è:
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
Il chrtcomando all'inizio commuterà le cose sulla classe di pianificazione batch, che equivale ad aggiungere 0,5 al valore gradevole. L'opzione -n per ionice è una priorità semplice per le opzioni realtime ( -c 1) e best-effort ( -c 2), con valori più bassi che hanno la priorità più alta proprio come i bei valori (ma nell'intervallo 0-7). Tuttavia, il comando ionice non è strettamente necessario, poiché la classe e la priorità di pianificazione I / O derivano per impostazione predefinita dai parametri di pianificazione della CPU e nice -n 19implica ionice -c 2 -n 7.
Tuttavia, è possibile ottenere l'utilizzo minimo assoluto delle risorse impostando le classi di programmazione CPU e I / O su inattive. In entrambi i casi, gli scheduler "inattivi" non sono in realtà programmatori inattivi e sarai comunque in grado di utilizzare le risorse, è solo che tutto avrà priorità più alta.
Per la classe di pianificazione della CPU, questo utilizza anche il chrtcomando, anche se senza necessità nice(la priorità deve essere impostata 0nella classe di pianificazione inattiva), e si presenta così:
chrt -i 0 {command or PID}
Il nicecomando su Linux rispecchia la versione SVR4, il che significa che non può cambiare la classe di pianificazione, solo un buon valore (che si comporta anche diversamente su Linux rispetto al classico UNIX, ma è un po 'OT). Dato che le classi di pianificazione alternative originali erano POSIX.1E in tempo reale SCHED_RRe SCHED_FIFO, il comando per impostare le classi di pianificazione è stato chiamato chrt. L' -iopzione specifica di utilizzare la SCHED_IDLEclasse di pianificazione
Per la classe di pianificazione I / O, si utilizza ionice. Il comando esatto è simile al seguente:
ionice -c 3 {command or PID}
L' -copzione specifica quale classe di pianificazione utilizzare e 3 è il numero per la classe inattiva. Si noti che a seconda del programmatore di I / O a blocchi utilizzato, ciò potrebbe non avere alcun impatto su nulla. In particolare, lo noopscheduler I / O non supporta affatto le priorità o le classi di schedulazione, e sono abbastanza sicuro che deadlineneanche gli scheduler (sia quello legacy che quello blk-mq).
Se vuoi farlo in modo programmatico, sia per il tuo programma, sia per aggiustare le cose per altri processi, controlla le pagine man per le chiamate di sistema sched_setschedulere ioprio_set(anche se vale la pena leggere entrambe se vuoi anche più background).