TASKSET(1) دستورات کاربری TASKSET(1)

taskset - دریافت یا تنظیم وابستگی پردازنده یک فرایند

taskset [options] mask command [argument...]

taskset [options] -p [mask] pid

دستور taskset برای تنظیم یا دریافت وابستگی پردازنده (CPU affinity) یک فرایند در حال اجرا بر اساس شناسه فرایند (pid) آن، یا برای اجرای یک command جدید با وابستگی پردازنده مشخص به کار می‌رود. وابستگی پردازنده ویژگی‌ای از زمان‌بند است که یک فرایند را به مجموعه مشخصی از پردازنده‌ها در سیستم متصل می‌کند. زمان‌بند لینوکس به وابستگی پردازنده تعیین‌شده پایبند خواهد بود و فرایند روی هیچ پردازنده دیگری اجرا نخواهد شد. توجه داشته باشید که زمان‌بند لینوکس از وابستگی طبیعی پردازنده نیز پشتیبانی می‌کند: زمان‌بند تلاش می‌کند به دلایل کارایی تا جای ممکن فرایندها را روی همان پردازنده نگه دارد. بنابراین، تحمیل یک وابستگی پردازنده خاص تنها در کاربردهای ویژه‌ای مفید است. وابستگی برخی فرایندها مانند ریسه‌های به ازای پردازنده هسته (kernel per-CPU threads) قابل تنظیم نیست.

وابستگی پردازنده به صورت یک ماسک بیتی (bitmask) نمایش داده می‌شود، که در آن کم‌ارزش‌ترین بیت متناظر با نخستین پردازنده منطقی و باارزش‌ترین بیت متناظر با آخرین پردازنده منطقی است. ممکن است همه پردازنده‌ها روی یک سیستم موجود نباشند، اما یک ماسک می‌تواند پردازنده‌های بیشتری نسبت به موارد موجود را مشخص کند. ماسک دریافت‌شده تنها بیت‌هایی را منعکس می‌کند که متناظر با پردازنده‌های موجود فیزیکی روی سیستم هستند. اگر یک ماسک نامعتبر داده شود (یعنی ماسکی که با هیچ پردازنده معتبری روی سیستم فعلی تطابق ندارد) خطایی بازگردانده می‌شود. ماسک‌ها می‌توانند در مبنای شانزده (با یا بدون پیشوند "0x") یا به صورت فهرستی از پردازنده‌ها با گزینه --cpu-list مشخص شوند. برای مثال،

0x00000001

پردازنده شماره 0 است،

0x00000003

پردازنده‌های شماره 0 و 1 است،

FFFFFFFF

پردازنده‌های شماره 0 تا 31 است،

0x32

پردازنده‌های شماره 1، 4 و 5 است،

--cpu-list 0-2,6

پردازنده‌های شماره 0، 1، 2 و 6 است.

--cpu-list 0-10:2

پردازنده‌های شماره 0، 2، 4، 6، 8 و 10 است. پسوند ":N" گام (stride) را در محدوده مشخص می‌کند؛ برای مثال 0-10:3 به صورت فهرست 0,3,6,9 تفسیر می‌شود.

هنگامی که taskset به پایان می‌رسد، تضمین می‌شود که برنامه ارائه‌شده روی یک پردازنده مجاز زمان‌بندی شده است.

-a, --all-tasks

تنظیم یا دریافت وابستگی پردازنده تمام وظایف (ریسه‌ها) برای یک PID مشخص.

-c, --cpu-list

تفسیر mask به صورت فهرست عددی پردازنده‌ها به جای ماسک بیتی. اعداد با کاما از هم جدا می‌شوند و می‌توانند شامل محدوده باشند. برای مثال: 0,5,8-11.

-p, --pid

عملیات روی یک PID موجود و عدم راه‌اندازی وظیفه جدید. اگر PID برابر با صفر باشد، روی فرایند خود taskset عمل می‌کند.

-h, --help

نمایش متن راهنما و خروج.

-V, --version

نمایش نسخه و خروج.

رفتار پیش‌فرض، اجرای یک دستور جدید با یک ماسک وابستگی مشخص است:

taskset mask command [arguments]

همچنین می‌توانید وابستگی پردازنده یک وظیفه موجود را دریافت کنید:

taskset -p pid

یا آن را تنظیم نمایید:

taskset -p mask pid

هنگامی که یک cpu-list برای یک فرایند موجود مشخص می‌شود، گزینه‌های -p و -c باید با هم گروه‌بندی شوند:

taskset -pc cpu-list pid

فرم --cpu-list تنها برای راه‌اندازی دستورات جدید کاربرد دارد:

taskset --cpu-list cpu-list command

یک کاربر می‌تواند وابستگی پردازنده فرایندی متعلق به همان کاربر را تغییر دهد. کاربر برای تغییر وابستگی پردازنده فرایند متعلق به کاربری دیگر باید دارای قابلیت CAP_SYS_NICE باشد. یک کاربر می‌تواند ماسک وابستگی هر فرایندی را دریافت کند.

taskset در حالت دریافت وابستگی، تا زمانی که PID ارائه‌شده وجود داشته باشد مقدار 0 را برمی‌گرداند.

taskset در حالت تنظیم وابستگی، تا زمانی که فراخوانی سیستمی sched_setaffinity(2) زیربنایی مقدار 0 بازگرداند، 0 برمی‌گرداند. موفقیت دستور تضمین نمی‌کند که ریسه مشخص‌شده حتماً به پردازنده(های) تعیین‌شده منتقل شده باشد، بلکه فقط تضمین می‌کند که ریسه به پردازنده‌ای خارج از ماسک وابستگی جدید منتقل نخواهد شد. برای مثال، وابستگی ریسه هسته kswapd قابل تنظیم است، اما ممکن است ریسه فوراً منتقل نشود و هیچ تضمینی نیست که هرگز منتقل شود:

$ ps ax -o comm,psr,pid | grep kswapd
kswapd0 4 82
$ sudo taskset -p 1 82
pid 82’s current affinity mask: 1
pid 82’s new affinity mask: 1
$ echo $?
0
$ ps ax -o comm,psr,pid | grep kswapd
kswapd0 4 82
$ taskset -p 82
pid 82’s current affinity mask: 1

در مقابل، هنگامی که کاربر یک وابستگی غیرمجاز را مشخص کند، taskset خطایی را چاپ کرده و 1 برمی‌گرداند:

$ ps ax -o comm,psr,pid | grep ksoftirqd/0
ksoftirqd/0 0 14
$ sudo taskset -p 1 14
pid 14’s current affinity mask: 1
taskset: failed to set pid 14’s affinity: Invalid argument
$ echo $?
1

چاپ وابستگی پردازنده فعلی به عنوان یک فهرست.

$ taskset -pc 0
pid 1355988’s current affinity list: 0-47

نوشته‌شده توسط Robert M. Love.

حق نشر © 2004 Robert M. Love. این یک نرم‌افزار آزاد است؛ برای شرایط کپی‌برداری به سورس‌کد مراجعه کنید. هیچ‌گونه ضمانتی وجود ندارد؛ حتی برای قابلیت فروش یا تناسب با یک هدف خاص.

chrt(1), nice(1), renice(1), sched_getaffinity(2), sched_setaffinity(2)

برای توضیحات طرح زمان‌بندی لینوکس به sched(7) مراجعه کنید.

برای گزارش باگ‌ها، از ردیاب مشکلات https://github.com/util-linux/util-linux/issues.

دستور taskset بخشی از بسته util-linux است که می‌توان آن را از بایگانی هسته لینوکس https://www.kernel.org/pub/linux/utils/util-linux. دانلود کرد.

2026-09-02 util-linux 2.42.3