প্রশ্নের সঠিকভাবে বাক্য গঠন করা আমার পক্ষে কঠিন মনে হয়েছে তবে আমি আমার সেরাটা দেব। আমি dwmআমার ডিফল্ট উইন্ডো ম্যানেজার হিসাবে ব্যবহার করি এবংdmenuআমার অ্যাপ্লিকেশন লঞ্চার হিসাবে আমি আমার ব্রাউজারটি বাদ দিয়ে জিইআইআই অ্যাপ্লিকেশনগুলি খুব কম ব্যবহার করি। আমার বেশিরভাগ কাজ সরাসরি কমান্ড লাইন থেকে সম্পন্ন হয়। তদ্ব্যতীত, অপারেটিং সিস্টেম, অ্যাপ্লিকেশন ইত্যাদির বিষয়ে আমি ন্যূনতমতাবাদের দুর্দান্ত অনুরাগী the আমি যে সরঞ্জামগুলি থেকে কখনই মুক্তি পাইনি সেগুলির মধ্যে একটি হ'ল অ্যাপ্লিকেশন লঞ্চার। মূলত কারণ অ্যাপ্লিকেশন প্রবর্তকরা কীভাবে কাজ করে / তারা কী করে তা সম্পর্কে আমার একটি সুনির্দিষ্ট বোঝার অভাব রয়েছে। এমনকি বিস্তৃত ইন্টারনেট অনুসন্ধান কেবল অস্পষ্ট ব্যাখ্যা দেখায়। আমি যা করতে চাই তা হ'ল আমার অ্যাপ্লিকেশন লঞ্চারটি থেকে মুক্তিও পারা যায় কারণ অ্যাপ্লিকেশনটি স্প্যানিংয়ের পরিবর্তে আমার এর কোনও ব্যবহার নেই। এটি করার জন্য আমি শেল থেকে অ্যাপ্লিকেশনগুলিকে "সঠিকভাবে" কীভাবে শুরু করতে পারি তা সত্যিই জানতে চাই। যার মাধ্যমে "সঠিকভাবে" এর অর্থ "অ্যাপ্লিকেশন লঞ্চারের মতো" দ্বারা প্রায় অনুমান করা যায়।
আমি শেল থেকে প্রক্রিয়াগুলি স্পন করার জন্য নিম্নলিখিত উপায়গুলি সম্পর্কে জানি:
exec /path/to/Programএকটি নতুন প্রক্রিয়া তৈরি না করে নির্দিষ্ট কমান্ডের সাথে শেলটি প্রতিস্থাপন করুনsh -c /path/to/Programশেল নির্ভর প্রক্রিয়া আরম্ভ করুন/path/to/Programশেল নির্ভর প্রক্রিয়া আরম্ভ করুন/path/to/Program 2>&1 &শেল স্বাধীন প্রক্রিয়া প্রবর্তনnohup /path/to/Program &শেল স্বাধীন প্রক্রিয়া আরম্ভ করুন এবং আউটপুট পুনর্নির্দেশnohup.out
আপডেট 1: আমি উদাহরণ দিয়ে বলতে পারি যে উদাহরণগুলি dmenuবারবার কল থেকে ps -eflবিভিন্ন অবস্থার অধীনে এটি পুনর্গঠন করে does এটি একটি নতুন শেল /bin/bashএবং এই শেলটির শিশু হিসাবে অ্যাপ্লিকেশনটি তৈরি করে /path/to/Program। বাচ্চা এতক্ষণ যতক্ষণ থাকে ততক্ষণ শেল চারপাশে থাকবে। যদি আপনি সমস্যা (এটা কিভাবে পরিচালনা করে এই আমাকে পরলোক হল ...) বিপরীতে nohup /path/to/Program &একটি শেল থেকে /bin/bashতারপর প্রোগ্রাম এই শেল সন্তান হয়ে যাবে কিন্তু আপনি যদি এই শেল থেকে প্রস্থান প্রোগ্রামের পিতা বা মাতা সর্বোচ্চে প্রক্রিয়া হতে হবে। সুতরাং যদি প্রথম প্রক্রিয়াটি উদাহরণস্বরূপ ছিল /sbin/init verboseএবং এটির PPID 1পরে এটি প্রোগ্রামটির পিতামাতা হবে। এখানে কি আমি একটি গ্রাফ ব্যবহার ব্যাখ্যা করার চেষ্টা করে: chromiumচালু করা হয় মাধ্যমে dmenu, firefoxব্যবহার চালু করা হয় exec firefox & exit:
systemd-+-acpid
|-bash---chromium-+-chrome-sandbox---chromium-+-chrome-sandbox---nacl_helper
| | `-chromium---5*[chromium-+-{Chrome_ChildIOT}]
| | |-{Compositor}]
| | |-{HTMLParserThrea}]
| | |-{OptimizingCompi}]
| | `-3*[{v8:SweeperThrea}]]
| |-chromium
| |-chromium-+-chromium
| | |-{Chrome_ChildIOT}
| | `-{Watchdog}
| |-{AudioThread}
| |-3*[{BrowserBlocking}]
| |-{BrowserWatchdog}
| |-5*[{CachePoolWorker}]
| |-{Chrome_CacheThr}
| |-{Chrome_DBThread}
| |-{Chrome_FileThre}
| |-{Chrome_FileUser}
| |-{Chrome_HistoryT}
| |-{Chrome_IOThread}
| |-{Chrome_ProcessL}
| |-{Chrome_SafeBrow}
| |-{CrShutdownDetec}
| |-{IndexedDB}
| |-{LevelDBEnv}
| |-{NSS SSL ThreadW}
| |-{NetworkChangeNo}
| |-2*[{Proxy resolver}]
| |-{WorkerPool/1201}
| |-{WorkerPool/2059}
| |-{WorkerPool/2579}
| |-{WorkerPool/2590}
| |-{WorkerPool/2592}
| |-{WorkerPool/2608}
| |-{WorkerPool/2973}
| |-{WorkerPool/2974}
| |-{chromium}
| |-{extension_crash}
| |-{gpu-process_cra}
| |-{handle-watcher-}
| |-{inotify_reader}
| |-{ppapi_crash_upl}
| `-{renderer_crash_}
|-2*[dbus-daemon]
|-dbus-launch
|-dhcpcd
|-firefox-+-4*[{Analysis Helper}]
| |-{Cache I/O}
| |-{Cache2 I/O}
| |-{Cert Verify}
| |-3*[{DOM Worker}]
| |-{Gecko_IOThread}
| |-{HTML5 Parser}
| |-{Hang Monitor}
| |-{Image Scaler}
| |-{JS GC Helper}
| |-{JS Watchdog}
| |-{Proxy R~olution}
| |-{Socket Thread}
| |-{Timer}
| |-{URL Classifier}
| |-{gmain}
| |-{localStorage DB}
| |-{mozStorage #1}
| |-{mozStorage #2}
| |-{mozStorage #3}
| |-{mozStorage #4}
| `-{mozStorage #5}
|-gpg-agent
|-login---bash---startx---xinit-+-Xorg.bin-+-xf86-video-inte
| | `-{Xorg.bin}
| `-dwm-+-dwmstatus
| `-xterm---bash-+-bash
| `-pstree
|-systemd---(sd-pam)
|-systemd-journal
|-systemd-logind
|-systemd-udevd
|-wpa_actiond
`-wpa_supplicant
আপডেট 2: আমি অনুমান করি যে প্রশ্নটি এ পর্যন্ত সিদ্ধ করা যেতে পারে: একটি প্রক্রিয়াটির পিতামাতার কী হওয়া উচিত? এটি উদাহরণস্বরূপ একটি শাঁস হওয়া উচিত বা এটি initপ্রক্রিয়া হওয়া উচিত প্রক্রিয়া সহ PID 1?
init- যার উত্তরটি হতে পারে ... সম্ভবত? এটি কীভাবে / যদি আপনি এটির সাথে কথা বলার পরিকল্পনা করেন, initআপনি কী ব্যবহার করেন এবং ডেটা চ্যানেলগুলি কোথায় তা নির্ভর করে depends সাধারণভাবে সেই জিনিসগুলি নিজেই কাজ করার প্রবণতা রাখে - এটাই তার initজন্য। যে কোনও ক্ষেত্রে, সাধারণত যখন আপনি তখন কোনও প্রক্রিয়াটি ডিমনাইজ করেন init। অথবা আপনি যদি চাকরি নিয়ন্ত্রণ চান, বর্তমান শেল।
dmenuএবং যা শিখেছি তার সাথে আমি কীভাবে এগিয়ে যাব তা দেখব। আমি খুঁজে পেতে exec /path/to/Program & exitবা /bin/bash -c /path/to/Program & exitবেশ ব্যবহারযোগ্য হতে হবে। তবে তারা সকলেই 1অর্থাত্ initএর পিতামাতার Programসাথে আমার পক্ষে ঠিক আছে যতক্ষণ না এটি বোধগম্য হয় এবং কোনও মৌলিক *nixনীতি লঙ্ঘন করে না ।
exec &, আমার মনে হয়। আমি সাধারণত টার্মিনাল থেকে আমার জিনিসগুলি করি ... সম্ভবত আপনি এখানে বেন ক্রলের প্রশ্ন থেকে কিছুটা উপকার পাবেন । আমার সেখানে একটি উত্তর আছে, তবে তাদের সবগুলি খুব ভাল। যাইহোক, আপনি যখন কোনও প্রক্রিয়া ব্যাকগ্রাউন্ড করেন এবং এর পিতামাতার মতো মারা যায়: sh -c 'cat & kill $$'আপনি এটি অনাথ হন, এবং এটি শেষ পর্যন্ত কাটা পেতে শুরু করে। এটাই ইনিশের কাজ - এজন্য তারা সকলেই এতে পড়ে fall
systemd--bash--chromium। আমি systemd--chromiumযখন শেল থেকে ফায়ার ফক্স স্প্যান করি তখন সমস্ত পদ্ধতি যা আমি চেষ্টা করি তা শেষ পর্যন্ত নীচের ফর্মের একটি প্রক্রিয়া গাছের দিকে নিয়ে যায় । শেলটি এখানে কীভাবে তৈরি হয়? এটি কোনও টার্মিনালের সাথে সম্পর্কিত নয়।