summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 13:17:26 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 13:17:26 +0000
commita4dc4fbcc1b131061dcccd5cdcc2395d9a2ba784 (patch)
treebc531e7e083fff1668bb4e79e9692d8cc47aea95
parentInitial commit. (diff)
downloadpsmisc-a4dc4fbcc1b131061dcccd5cdcc2395d9a2ba784.tar.xz
psmisc-a4dc4fbcc1b131061dcccd5cdcc2395d9a2ba784.zip
Adding upstream version 23.7.upstream/23.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--.tarball-version1
-rw-r--r--ABOUT-NLS1
-rw-r--r--AUTHORS4
-rw-r--r--COPYING340
-rw-r--r--ChangeLog831
-rw-r--r--Makefile.am137
-rw-r--r--Makefile.in1224
-rw-r--r--NEWS3
-rw-r--r--README1
-rw-r--r--README.md51
-rw-r--r--aclocal.m41160
-rwxr-xr-xcompile348
-rwxr-xr-xconfig.guess1754
-rw-r--r--config.h.in405
-rwxr-xr-xconfig.rpath684
-rwxr-xr-xconfig.sub1890
-rwxr-xr-xconfigure13476
-rw-r--r--configure.ac233
-rwxr-xr-xdepcomp791
-rw-r--r--doc/Makefile.am11
-rw-r--r--doc/Makefile.in535
-rw-r--r--doc/fuser.1310
-rw-r--r--doc/killall.1178
-rw-r--r--doc/peekfd.164
-rw-r--r--doc/prtstat.140
-rw-r--r--doc/pslog.140
-rw-r--r--doc/pstree.1178
-rw-r--r--icons/Makefile.am2
-rw-r--r--icons/Makefile.in450
-rw-r--r--icons/psmisc16.gifbin0 -> 243 bytes
-rw-r--r--icons/psmisc32.gifbin0 -> 513 bytes
-rw-r--r--icons/pstree16.xpm50
-rw-r--r--icons/pstree32.xpm66
-rwxr-xr-xinstall-sh541
-rw-r--r--m4/gettext.m4386
-rw-r--r--m4/host-cpu-c-abi.m4675
-rw-r--r--m4/iconv.m4288
-rw-r--r--m4/intlmacosx.m465
-rw-r--r--m4/lib-ld.m4168
-rw-r--r--m4/lib-link.m4800
-rw-r--r--m4/lib-prefix.m4320
-rw-r--r--m4/nls.m432
-rw-r--r--m4/po.m4450
-rw-r--r--m4/progtest.m491
-rw-r--r--man-po/Makefile.am95
-rw-r--r--man-po/Makefile.in541
-rw-r--r--man-po/da.po1652
-rw-r--r--man-po/da/prtstat.136
-rw-r--r--man-po/da/pslog.139
-rw-r--r--man-po/de.po1355
-rw-r--r--man-po/de/fuser.1241
-rw-r--r--man-po/de/killall.1134
-rw-r--r--man-po/de/peekfd.163
-rw-r--r--man-po/de/prtstat.136
-rw-r--r--man-po/de/pslog.139
-rw-r--r--man-po/de/pstree.1147
-rw-r--r--man-po/fr.po1363
-rw-r--r--man-po/fr/fuser.1232
-rw-r--r--man-po/fr/killall.1128
-rw-r--r--man-po/fr/peekfd.163
-rw-r--r--man-po/fr/prtstat.136
-rw-r--r--man-po/fr/pslog.139
-rw-r--r--man-po/fr/pstree.1146
-rw-r--r--man-po/hr.po1842
-rw-r--r--man-po/hr/fuser.1219
-rw-r--r--man-po/hr/killall.1127
-rw-r--r--man-po/hr/peekfd.160
-rw-r--r--man-po/hr/prtstat.136
-rw-r--r--man-po/hr/pslog.139
-rw-r--r--man-po/hr/pstree.1138
-rw-r--r--man-po/ko.po1356
-rw-r--r--man-po/ko/fuser.1185
-rw-r--r--man-po/ko/killall.1105
-rw-r--r--man-po/ko/peekfd.155
-rw-r--r--man-po/ko/prtstat.135
-rw-r--r--man-po/ko/pslog.140
-rw-r--r--man-po/ko/pstree.1119
-rw-r--r--man-po/man.stamp0
-rw-r--r--man-po/po4a.cfg25
-rw-r--r--man-po/psmisc.pot1566
-rw-r--r--man-po/pt_BR.po1920
-rw-r--r--man-po/pt_BR/fuser.1221
-rw-r--r--man-po/pt_BR/killall.1129
-rw-r--r--man-po/pt_BR/peekfd.161
-rw-r--r--man-po/pt_BR/prtstat.136
-rw-r--r--man-po/pt_BR/pslog.139
-rw-r--r--man-po/pt_BR/pstree.1138
-rw-r--r--man-po/ro.po1368
-rw-r--r--man-po/ro/fuser.1232
-rw-r--r--man-po/ro/killall.1130
-rw-r--r--man-po/ro/peekfd.162
-rw-r--r--man-po/ro/prtstat.136
-rw-r--r--man-po/ro/pslog.139
-rw-r--r--man-po/ro/pstree.1144
-rw-r--r--man-po/ru.po1847
-rw-r--r--man-po/ru/fuser.1221
-rw-r--r--man-po/ru/killall.1124
-rw-r--r--man-po/ru/peekfd.160
-rw-r--r--man-po/ru/prtstat.136
-rw-r--r--man-po/ru/pslog.139
-rw-r--r--man-po/ru/pstree.1140
-rw-r--r--man-po/sr.po1840
-rw-r--r--man-po/sr/fuser.1220
-rw-r--r--man-po/sr/killall.1122
-rw-r--r--man-po/sr/peekfd.160
-rw-r--r--man-po/sr/prtstat.136
-rw-r--r--man-po/sr/pslog.139
-rw-r--r--man-po/sr/pstree.1137
-rw-r--r--man-po/sv.po1830
-rw-r--r--man-po/sv/fuser.1221
-rw-r--r--man-po/sv/killall.1123
-rw-r--r--man-po/sv/peekfd.160
-rw-r--r--man-po/sv/prtstat.136
-rw-r--r--man-po/sv/pslog.139
-rw-r--r--man-po/sv/pstree.1139
-rw-r--r--man-po/uk.po1364
-rw-r--r--man-po/uk/fuser.1229
-rw-r--r--man-po/uk/killall.1132
-rw-r--r--man-po/uk/peekfd.162
-rw-r--r--man-po/uk/prtstat.136
-rw-r--r--man-po/uk/pslog.139
-rw-r--r--man-po/uk/pstree.1141
-rwxr-xr-xmisc/git-version-gen181
-rwxr-xr-xmissing215
-rw-r--r--po/ChangeLog67
-rw-r--r--po/LINGUAS2
-rw-r--r--po/Makefile.in.in510
-rw-r--r--po/Makevars78
-rw-r--r--po/POTFILES.in10
-rw-r--r--po/Rules-quot62
-rw-r--r--po/bg.gmobin0 -> 5268 bytes
-rw-r--r--po/bg.po829
-rw-r--r--po/boldquot.sed10
-rw-r--r--po/ca.gmobin0 -> 1696 bytes
-rw-r--r--po/ca.po824
-rw-r--r--po/cs.gmobin0 -> 18667 bytes
-rw-r--r--po/cs.po844
-rw-r--r--po/da.gmobin0 -> 17551 bytes
-rw-r--r--po/da.po826
-rw-r--r--po/de.gmobin0 -> 18853 bytes
-rw-r--r--po/de.po892
-rw-r--r--po/el.gmobin0 -> 20607 bytes
-rw-r--r--po/el.po754
-rw-r--r--po/en@boldquot.header25
-rw-r--r--po/en@quot.header22
-rw-r--r--po/eo.gmobin0 -> 17860 bytes
-rw-r--r--po/eo.po867
-rw-r--r--po/es.gmobin0 -> 19035 bytes
-rw-r--r--po/es.po797
-rw-r--r--po/eu.gmobin0 -> 8021 bytes
-rw-r--r--po/eu.po1002
-rw-r--r--po/fi.gmobin0 -> 12015 bytes
-rw-r--r--po/fi.po1012
-rw-r--r--po/fr.gmobin0 -> 18979 bytes
-rw-r--r--po/fr.po888
-rw-r--r--po/hr.gmobin0 -> 18391 bytes
-rw-r--r--po/hr.po856
-rw-r--r--po/hu.gmobin0 -> 11580 bytes
-rw-r--r--po/hu.po847
-rw-r--r--po/id.gmobin0 -> 18109 bytes
-rw-r--r--po/id.po754
-rw-r--r--po/insert-header.sin28
-rw-r--r--po/it.gmobin0 -> 15795 bytes
-rw-r--r--po/it.po810
-rw-r--r--po/ja.gmobin0 -> 3903 bytes
-rw-r--r--po/ja.po821
-rw-r--r--po/ka.gmobin0 -> 27787 bytes
-rw-r--r--po/ka.po767
-rw-r--r--po/ko.gmobin0 -> 19600 bytes
-rw-r--r--po/ko.po745
-rw-r--r--po/nb.gmobin0 -> 3890 bytes
-rw-r--r--po/nb.po833
-rw-r--r--po/nl.gmobin0 -> 18295 bytes
-rw-r--r--po/nl.po839
-rw-r--r--po/pl.gmobin0 -> 18618 bytes
-rw-r--r--po/pl.po739
-rw-r--r--po/psmisc.pot600
-rw-r--r--po/pt.gmobin0 -> 18025 bytes
-rw-r--r--po/pt.po848
-rw-r--r--po/pt_BR.gmobin0 -> 18167 bytes
-rw-r--r--po/pt_BR.po882
-rw-r--r--po/quot.sed6
-rw-r--r--po/remove-potcdate.sin25
-rw-r--r--po/ro.gmobin0 -> 19506 bytes
-rw-r--r--po/ro.po865
-rw-r--r--po/ru.gmobin0 -> 23424 bytes
-rw-r--r--po/ru.po892
-rw-r--r--po/sr.gmobin0 -> 22443 bytes
-rw-r--r--po/sr.po846
-rw-r--r--po/stamp-po1
-rw-r--r--po/sv.gmobin0 -> 17974 bytes
-rw-r--r--po/sv.po898
-rw-r--r--po/uk.gmobin0 -> 23815 bytes
-rw-r--r--po/uk.po880
-rw-r--r--po/vi.gmobin0 -> 20359 bytes
-rw-r--r--po/vi.po857
-rw-r--r--po/zh_CN.gmobin0 -> 17602 bytes
-rw-r--r--po/zh_CN.po864
-rw-r--r--po/zh_TW.gmobin0 -> 17727 bytes
-rw-r--r--po/zh_TW.po834
-rw-r--r--src/comm.h42
-rw-r--r--src/fuser.c2237
-rw-r--r--src/fuser.h113
-rw-r--r--src/i18n.h26
-rw-r--r--src/killall.c1069
-rw-r--r--src/lists.h373
-rw-r--r--src/peekfd.c466
-rw-r--r--src/prtstat.c341
-rw-r--r--src/prtstat.h21
-rw-r--r--src/pslog.c175
-rw-r--r--src/pstree.c1568
-rw-r--r--src/signals.c86
-rw-r--r--src/signals.h19
-rw-r--r--src/signames.c5
-rw-r--r--src/socket_test.c55
-rw-r--r--src/statx.c159
-rw-r--r--src/statx.h73
-rw-r--r--testsuite/Makefile.am17
-rw-r--r--testsuite/Makefile.in508
-rw-r--r--testsuite/config/unix.exp52
-rw-r--r--testsuite/fuser.test/fuser.exp61
-rw-r--r--testsuite/killall.test/killall.exp32
-rw-r--r--testsuite/pslog.test/pslog.exp19
223 files changed, 90904 insertions, 0 deletions
diff --git a/.tarball-version b/.tarball-version
new file mode 100644
index 0000000..7ed79f5
--- /dev/null
+++ b/.tarball-version
@@ -0,0 +1 @@
+23.7
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 0000000..0a9d56d
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1 @@
+<https://www.gnu.org/software/gettext/manual/html_node/Users.html>
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..02fb2be
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,4 @@
+Werner Almesberger <werner@almesberger.net>
+Craig Small <csmall@small.dropbear.id.au>
+peekfd written by Trent Waddington <trent.waddington@gmail.com>
+pslog written by Vito Mule' <mule.vito@gmail.com>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..60549be
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..15c5725
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,831 @@
+Changes in 23.7
+===============
+ * build-sys: Make disable-statx work
+ * fuser: Fallback to stat() if no statx() Debian 1030747 #48
+ * fuser: silently ignore EACCES when scanning proc directories
+ * killall: small formatting fixes Debian #1037231
+ * pstree: Do not assume root PID #49
+ * pslog: include config.h #51 !36
+ * misc: Update gettext to 0.21
+
+Changes in 23.6
+===============
+ * buildsys: Fix DEJAGNU work-around Debian #1015089
+ * killall: Use kill if pidfd_send_signal fails Debian #1015228
+ * fuser: Do not mention nonexistent - reset option #42
+ * fuser: Use modern statn where possible
+ * pstree: Better AppArmor support !30
+
+Changes in 23.5
+===============
+ * killall: Check truncated names !28
+ * killall: Use openat and pidfd_send_signal #37
+ * killall: Don't check paths of sockets #35
+ * pstree: Check for process with show_parents #38
+ * pstree: Don't disable compaction with show pgids #34
+ * pstree: Fix storage leak !29
+
+Changes in 23.4
+===============
+ * killall: Dynamically link to selinux and use security attributes
+ * pstree: Do not crash on missing processes !21
+ * pstree: fix layout when using -C !24
+ * pstree: add time namespace !25
+ * pstree: Dynamically link to selinux and use attr
+ * fuser: Get less confused about duplicate dev_id !10
+ * fuser: Only check pathname on non-block devices !31
+
+Changes in 23.3
+===============
+ * killall: check also truncated 16 char comm names Debian #912748
+ * fuser: Return early if have nulls !18
+ * peekfd: Add support for ARM64 !19
+ * pstree: Add color by age #21
+ * fuser: Use larger inode sizes #16
+
+Changes in 23.2
+===============
+ * misc: Command names increased from 16 to 64 characters
+ * buildsys: signals.c depends on signames.h !16
+ * docs: Fix fuser.1 groff errors Debian #900225
+ * killall: look at all namespaces by default
+ * killall: Fix -INT option parsing #11
+ * killall: ignore -n 0 #15
+ * killall: another crack at fixing getopt #12 #13
+ * peekfd: Attach to all threads option !15
+ * pslog: Define PATH_MAX if required Debian:#905797
+
+Changes in 23.1
+===============
+ * killall: Remove debug output Debian: #864753
+ * docs: distribute pslog.1
+ * docs: distribute README.md Debian: #864752
+Changes in 23.0
+===============
+ * killall: Fix process age race condition !11 Debian #822861
+ * killall: only use scope of current namespace by default
+ * killall: better parsing of command names
+ * pstree: add cgroup namespaces !10
+ * peekfd: Help give long options too !5
+ * killall: correctly report when 32+ procs match !8
+ * prtat: Remove duplicate options in man page !3 Debian #846387
+ * pslog: New program to check what logs are open merge !1
+ * fuser: increase path length for octal escaping SF [#37]
+ * Make usage of linked lists of devices found in
+ /proc/self/mountinfo optional
+ * Make timeout() in timeout.c work with shared mmap to
+ reduce the load due write/read the stat buffers
+ * Add list_sort() to lists.h to be able to sort lists
+ * fuser: Fixed typo for -M flag. Debian #740275
+ * pstree: by default doesn't show threadnames, use -t to show
+ as it disables compaction. SF [#33] Debian #815902
+ * pstree: Removed need for PATH_MAX Debian #750405
+ * pstree: ignores disappeared processes. SF [#34]
+ * killall: -o and -y work with -r flags. SF [#64]
+ * m4/gettext.m4: Upgrade to gettext-0.19.4.
+ * m4/iconv.m4: Upgrade to gettext-0.19.4.
+ * m4/lib-ld.m4: Upgrade to gettext-0.19.4.
+ * m4/lib-link.m4: Upgrade to gettext-0.19.4.
+ * m4/lib-prefix.m4: Upgrade to gettext-0.19.4.
+ * m4/nls.m4: Upgrade to gettext-0.19.4.
+ * m4/po.m4: Upgrade to gettext-0.19.4.
+ * m4/progtest.m4: Upgrade to gettext-0.19.4.
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.19.4.
+
+Changes in 22.21
+================
+ * Missing comma in fuser(1) added Debian #702391
+ * pstree uses COLUMN env variable Debian #717017
+ * pstree shows proper thread names SF Bug#57
+ * pstree shows namespace options SF Patch#30
+ * killall.1 minor fixes SF Bug#59
+ * peekfd for m68k SF Patch#31
+ * Fixing some derefefed pointers SF Patch#32
+ * Minor typos in man pages SF Bug#61 Bug#60
+ * fuser -m and -M flags work either way Debian #606178
+
+Changes in 22.20
+================
+ * pstree sorts properly on names Debian #682014
+ * fuser -m regresion fixed SF #3559232, thanks to hanpt
+ * pstree finds orphaned processes SF#3537508
+ * fuser finds unix sockets again SF #3502649
+ * pstree finds pid 0 stops looping Debian #687829
+
+Changes in 22.19
+================
+ * killall with no args exits again SF #3536526
+
+Changes in 22.18
+================
+ * Added AC_CANONICAL_TARGET for target_os Debian #673485
+ * sed doesn't have [0-9]+ replace with [0-9][0-9]*
+ * assert in killall triggered for small lifetimes Debian #628617
+ * killall MAX_NAMES off by one Debian #677428
+ * Removed remaining parts of pidof
+
+Changes in 22.17
+================
+ * Make it possible to use --enable-timeout-stat as well as
+ --enable-timeout-stat=static for a static background process which
+ does the final stat system calls
+ * Do not mix HAVE_TIMEOUT_STAT with WITH_TIMEOUT_STAT
+ * Add timeout.c/timeout.h for static background process which is able
+ to read the file name from pipe, does the stat(2) system call, and
+ writes the result back to a pipe.
+ * Really add ASCII null at command string in add_proc() of pstree.c
+ * fuser uses correct timeout_stat define Debian #661723
+ * fuser is not compiled on hurd-i386 Debian #673485
+ * No TEXTRELS in src/lists built as PIE on x86
+ * Fake pstree root for kernels with hidepid turned on
+ * More fixes for Cygwin SF Patch #3511920
+ * pstree can show PGIDs SF Patch #3471056
+
+Changes in 22.16
+================
+ * Use strncpy for COMM_LEN and make it 18 characters to cover brackets
+ in name.
+ * don't change COMM_LEN, it breaks matching long commands
+ Debian #661145
+ * Enable some harden AM_CFLAGS by default, use configure option
+ --disable-harden-flags to not use it.
+
+Changes in 22.15
+================
+ * Really apply patch for SF#31110178 RH#651794, SF#3317431
+ * Conditionally use fork before stat calls SF#3427522
+ * Patch from Corrina Vinschen for compiling on cygwin
+ * Use ENOENT not EBADE for FreeBSD Debian #631566
+ * Fix prstat typos
+ * Stop zombies by using waitpid Ubuntu #876387 by Peter Holik, SF#3429674
+ * Fixed minor older/younger typo in killall.1 thanks to Maikel Linke
+ * Remove doubled content in src/lists.h
+ * Add another 2 for thread brackets in pstree.c
+ * Correct defines for timeout in configure.ac
+
+Changes in 22.14
+================
+ * Fix file descriptor as well as memory leaks in fuser
+ * Strip @ symbol from file names read from /proc/net/unix
+ * Above 2 changes close openSuSE bugs #536209, #529520, and #417841
+ and provided by Werner Fink
+ * Applied patch from Werner Fink to avoid stat(2) on NFS mounts
+ * Zeros process group memory - Patch by jgorig SF#3152925 RH#666213
+ * fuser -m -s flags work - Patch by jgorig SF#31110178 RH#651794
+ * fuser silent if /proc/swaps not available SF#3072134
+ * ppc 64 support for peekfd by jgorig SF#3166444
+ * jiffies now ULL in killall SF#3138538
+ * pstree can show parents of a process. Patch supplied by Curtis
+ Hawthorne SF#3135157
+ * killall creates right size buffer instead of MAX_PATH Debian #623425
+ * check for /proc/$$/stat not /proc/self/stat which is not available
+ on hurd platforms. Same Debian bug as above
+ * fuser understands IPv6 addresses, removed comment in fuser.1 that it
+ doesn't Debian #609904
+ * fuser -k only returns 0 if you kill something.
+ * fuser doesn't complain if /proc/#/fd disappears SF#3310990
+
+Changes in 22.13
+================
+ * configure patch for x86_64 properly applied SF#3029302 by snowman123
+ * patch configure so pt_regs isn't used on SuperH. Fix by
+ Nobuhiro Iwamatsu in Debian #588986
+ * Fixed configure.ac so only mipsel not mips compiles peekfd
+
+Changes in 22.12
+================
+ * In fuser, switched the ipv6 and ipv4 checks around Debian #581604
+ * peekfd configure patch for x86_64 SF#2986027
+ * peekfd works with ARM and MIPS thanks to patch by Arnaud Patard
+ * peekfd off-by-one patch applied SF#1948351
+ * pstree -a doesn't segfault on grsec kernels Debian #588152
+
+Changes in 22.11
+================
+ * Another attempted at killall -SIGNAME Debian #573924
+
+Changes in 22.10
+================
+ * fuser -k -m ... won't kill itself Debian #562767
+ * fuser -NAME fixed SF #2924691, Debian #563388, Gentoo #297423
+ * Added locale.h include for killall on non NLS SF #2922163
+ * Reversed normal file fuser -k check Debian #563387
+
+Changes in 22.9
+===============
+ * short option l returned in fuser Debian #539087
+ * long options terminated with 0s Debian #551833
+ * fuser only kills normal processes, patch thanks to Erik Li SF# 2892724
+ * New fuser -M if you REALLY want mount points, patch thanks to
+ Jeremie LE HEN SF#2899709
+ * Fixed killall options for VTALRM and ILL Debian #559011
+ * pstree -a does not compact threads Debian #525632
+ * new program prtstat which prints contents of /proc/<pid>/stat
+ Debian #281706
+ * killall restricts by date. Thanks to George Danchev Debian #544657
+ * long options terminated in pstree too to stop segfault
+ * Re-worked fuser getopt again so -KILL options work Gentoo #297423
+ * Fix off-by-one overflow in pstree SF# 2832375
+
+Changes in 22.8
+===============
+ * Added Czech PO file
+ * rc1 update of Italian, Polish, Indonesian, Swedish and Russian PO files
+ * Updated Finnish, Italian and Vietnamese PO files
+ * Applied patch from Kari Hautio for lazy umount'ed filesystems SF#2545632
+ * Applied patch from Anonymous SF submitter to fix killall -l
+ Fixes SF#2002570
+ * fuser will print mounts,nfs exports and swaps with -v Debian #356655
+ and SF#533958
+ * pstree and fuser have long options Debian #517412
+ * Fixed pstree -a off-by-one error in buffer, Debian #536243
+ * Changed configure.ac to not use CXX SF# 2789801
+
+Changes in 22.7
+===============
+2009-05-04 Craig Small
+ * Updated Polish, Russian, Swedish and Indonesian PO files
+
+2009-04-26 Craig Small
+ * Changed fuser.1 so signal is SIGNAL to reduce confusion about whether
+ or not it is a parameter Debian #517413
+ * fuser.1 references pkill(1) Debian #517414
+
+2009-03-27 Craig Small
+ * Added Chinese (traditional) PO file
+
+2009-01-14 Craig Small
+ * Updated Russian PO file
+ * Clarified -m and -c for fuser Debian #467289
+
+2008-12-16 Craig Small
+ * Patch from Arnaud Giersch to fix udp ports in fuser Debian #502208
+ * pstree man page mentions -Z may not be available Debian #478327
+ * pstree handles UTF-8 lengths much better Debian #413503
+ * killall says no process found when process not found Debian #500097
+ * pstree makes a bigger buffer for -al flags Debian #352603
+
+2008-12-05 Craig Small
+ * Dynamically reallocate buffer for fuser patch from Don Armstrong
+
+2008-11-11 Craig Small
+ * Updated Indonesian PO file
+
+2008-08-09 Craig Small
+ * peekfd off by one problem in fds Debian #460530
+
+2007-11-19 Craig Small
+ * Patch from Marcus Watts for better comm handling in pstree
+ * Updated Hungarian po file
+
+2007-11-13 Craig Small
+ * Updated French and German po files
+ * Fuser -m detects more open sockets SF patch #1728412 Thnks marienz
+
+2007-11-07 Craig Small
+ * Updated Italian, Chinese simplified, Dutch, Swedish and Polish po files
+ * Removed old fuser
+
+Changes in 22.6
+===============
+2007-08-09 Craig Small
+ * killall.1 mentions you can use -SIGxxx as well as just -XXX for signal
+ Debian #431082
+
+2007-07-04 Tomas Smetana
+ * Added support for PPC architecture for peekfd
+
+2007-06-25 Craig Small
+ * Updated the Chinese simplified po file
+
+2007-06-21 Tomas Smetana
+ * Added support for x86_64 architecture for peekfd
+
+2007-06-13 Craig Small
+ * Added Chinese simplified po file
+
+2007-05-31 Craig Small
+ * Updated Dutch, Vietnamese, Polish and Italian translations
+ * Patch for peekfd from Benno Schulenberg
+
+2007-04-30 Craig Small
+ * Fixed up NLS for fuser, patch from Benno Schulenberg
+ * killall asks for Signal (procname) if not SIGTERM
+
+Changes in 22.5
+===============
+2007-04-18 Craig Small
+ * Conditonally compile peekfd if the right registers are found
+
+Changes in 22.4
+===============
+2007-04-11 Craig Small
+ * fuser correctly parses remote tcp ports Debian #397033
+ * Removed extra blank lines in fuser Debian #386564
+
+2007-03-02 Karel Zak
+ * killall <path> does textual path comparision with value of the
+ /proc/<pid>/exe link when a comparision with inode number failed.
+ The old algorithme based on inode numbers doesn't work if since
+ the process was started, the file at <path> has been replaced
+ (e.g due prelink process).
+
+2007-03-02 Craig Small
+ * Added peekfd
+
+2007-03-02 gettextize <bug-gnu-gettext@gnu.org>
+
+ * m4/gettext.m4: Upgrade to gettext-0.16.1.
+ * m4/iconv.m4: Upgrade to gettext-0.16.1.
+ * m4/lib-ld.m4: Upgrade to gettext-0.16.1.
+ * m4/lib-link.m4: Upgrade to gettext-0.16.1.
+ * m4/lib-prefix.m4: Upgrade to gettext-0.16.1.
+ * m4/nls.m4: Upgrade to gettext-0.16.1.
+ * m4/po.m4: Upgrade to gettext-0.16.1.
+ * m4/progtest.m4: Upgrade to gettext-0.16.1.
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.16.1.
+
+2006-09-28 Craig Small
+ * fuser tcp works on 64bit, after actually reading the submitted patch
+ and applying it, thankyou nigel_ding, SF# 1551731
+ * Added Russian translation SF Patch #1288068
+
+Changes in 22.3
+================
+2006-08-09 Craig Small
+ * Updated Hungarian PO file
+
+2006-05-25 Craig Small
+ * Updated Swedish PO file
+ * Fixed fuser man page ... Debian #358880
+
+2006-04-05 Karel Zak
+ * fuser return code set correcly in silent mode Debian #361639
+ * fuser -l doesnt complain but list signal names only
+
+2006-03-24 Craig Small
+ * Updated Bulgarian and Italian PO files
+ * Added Japanese and Hungarian PO files
+ * Moved some NEWS into README
+ * Removed killall flag from NEWS, its really OLDS
+ * fuser -n tcp port,host,host2 parses correctly
+
+Changes in 22.2
+===============
+2006-03-09 Craig Small
+ * Updated Nowegian and Vietnamese PO files
+
+2006-03-07 Craig Small
+ * Updated Polish and Dutch PO files
+
+2006-01-27 Craig Small
+ * Unix sockets work on all hosts now, including ones that don't have
+ network device set to 0.
+ * TCP/UDP6 sockets are found a bit better.
+ * Makefile changed so signames builds in all locales. Thanks to Mike
+ Frysinger for the patch.
+ * Return code works
+
+
+2006-01-23 Craig Small
+ * Updated Swedish, Vietnamese and Italian PO files
+ * Minor fixes for some error messages, thanks to Benno.
+
+
+2006-01-13 Craig Small
+ * Updated Polish and dutch PO files
+ * Added Bulgarian PO file
+
+Changes in 22.1
+===============
+2006-01-12 Craig Small
+ * Updated German PO file Debian #313934
+ * Updated Swedish PO file
+
+2006-01-04 Craig Small
+ * fuser signals eg -INT work better
+ * removed space out of fuser man page for -signal
+
+2005-12-16 Craig Small
+ * fuser -s flag works Debian #344901
+ * fix grep lines in Makefile for i386 arches Debian #344172
+ * Updsated Polish PO file
+
+Changes in 21.9
+===============
+2005-12-16 Craig Small
+ * Fixed install-exec-hook so only symlink pstree.x11 if file does not
+ exist already.
+ * Updated Vietnamese PO file
+
+2005-12-02 Karel Zak
+ * buffer overflow in killall scanf removed
+
+2005-11-26 Paul Martin
+ * Fixed segfault in pstree -a Debian #338108
+
+2005-11-22 Craig Small
+ * fuser can not use IPv6, for things like uClibc
+ * configure has --disable-ipv6 for above
+
+2005-11-15 Craig Small
+ * fuser finds unix sockets. Debian #338868
+
+2005-11-05 Rene Rebe <rene@exactcode.de>
+ * fixed print_matches to only print unmatched objects if -a is
+ specified and to output the header for -v
+ * Above patch fixes Debian #342765
+ * fixed argument parsing to handle groups like -av again
+
+Changes in 21.8
+===============
+ * fuser returns 1 if no match found like before.
+ * fuser.1 spells behavior correctly Debian: #337190
+
+
+Changes in 21.7
+===============
+ * Upgraded SELinux code to new api, thanks to Chris PeBenito
+ * define rpmatch for libraries that dont have it
+ * Fixed small typos in help, thanks to Benno Schulenberg
+ fixes SF# 1150042
+ * Completed change from Flask to SELinux, thanks to Benno Schulenberg
+ * pstree works better with uClibc, thanks Mike Frysinger
+ * fuser rewritten: possibly fixes Debian #312560
+ * fuser prints F instead of f is access is write, thanks to Tet.
+ * pstree checks to see it is a real tty Debian #326500
+ * pstree shows child threads with {commandname} Debian #230924
+ * better capitalisation with usage SF# 1150042
+ * Added warning about fuser and tcp/udp access Debian #327813
+ * pstree defaults to ASCII not VT100 until problems with terminals
+ are fixed Debian #288856
+ * fuser doesnt complain if it cannot scan some mount points Debian
+ #299153
+
+ * Applied psmisc-21.4-alt-progname to find pstrees name
+ * configure.in checks for tinfo library
+ * both above fixes from ALTLinux
+
+ * Added -u option for killall to kill process by user
+ * Removed old FLASK_LINUX define in pstree
+ * Added -r for to killall for regex matching for proc names
+ * Thanks to Karel Zak from RedHat for the patches
+
+
+
+Changes in 21.6
+===============
+
+2005-03-11
+ * Minor typo (specificiation) fixed
+ * Added closing bracket in fuser help
+ * Added Finnish translation
+ * Localised the yes/no prompts with rpmatch()
+ * Fixed NLS problems and some double ))s - Thanks to Jakub Bogusz
+ * Added Basque translation
+ * More NLS related fixes - Thanks to Guillem Jover
+ * killall aborts if it gets unknown flags Debian #250794
+ * Symbolic link created properly for pstree.x11 Debian #250096
+ * Strange mount points handled better Debian #178972
+ * Added Catalan translation
+ * killall can be case insenstive now
+ * Warning in killall.1 about process changing names Debian #187941
+ * Removed include termcap.h to fix RH include problem.
+ * Added Vietnamese translation
+ * Fixed --enable-flask logic SF#1094205
+ * Added Norwegian Bokmaal translation
+ * Fixed groff madness with fuser(1) Debian #298199
+ * Added Dutch translation
+
+Changes in 21.5
+===============
+2004-05-25 Craig Small <csmall@small.dropbear.id.au>
+ * Sven Dahl provides a patch for using psmisc with uclibc
+ * Sid flag in options is d not S. SF#791537
+ * Fixed typo in checking ss_family SF#845292
+ * Lines not truncated using UTF-8 SF Patch: #757164 Debian: #151523
+ * Case insensitve matching with -I flags SF Patch: #740662
+ * inode and devices use ino_t and dev_t SF#:
+ * Allow pstree to use ASCII characters with -A flag, patch by
+ Branden Robinson Debian: #240973
+ * Debug "here" statement removed
+ * POSIX -m option added, part of SF Bug: #901841
+ * fuser sends PIDs only to stdout, the rest goes to stderr.
+ Changed for POSIX compatibility
+ * Silently ignore -f option, for POSIX
+ * Using automake 1.8 now
+ * Built source signames.h not distributed in tar Debian: #240986
+ * Manual page for fuser explains -SIG is ignored with no -k
+ Debian: #222935
+
+2004-04-05 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.am (SUBDIRS): Add m4.
+ (SUBDIRS): Remove intl.
+ (ACLOCAL_AMFLAGS): New variable.
+ (EXTRA_DIST): Add config.rpath.
+ * configure.in (AC_CONFIG_FILES): Add m4/Makefile.
+
+Changes in 21.4
+===============
+2003-11-28 Craig Small <csmall@small.dropbear.id.au>
+ * Typos in killall.1 fixed Closes Debian: #198189
+ * fuser -ki now tells user default is N Closes Debian: #197356
+ * pstree -a doesn't print space at end of line Closes Debian: #182099
+ * Works with new sort flags +2 -> -k 3 Thankyou Andrew Walrond
+ * pstree.x11 now just pstree with a trick Closes Debian: #201042
+ * Icons for pstree, thankyou Tatlin! Closes Debian: #192636
+ * Removed message if no processes found,
+ * Excess blanks in fuser removed.
+ * Two lines above close Debian: #212795
+
+
+Changes in 21.3
+===============
+2003-04-03 Craig Small <csmall@small.dropbear.id.au>
+ * SELinux SID selection uses -d instead of -S to stop the confusion of
+ signal names, no flags with upper case letters ok?
+ Closes Debian: #193790, #163360
+ * Doesnt segfault on long cmdnames, thanks Ben Low Closes Debian: #187241
+ * Updated libtool and friends so it works on new coreutils
+
+2003-04-03 Craig Small <csmall@small.dropbear.id.au>
+ * More fixes for types, also some GCC 3.2 fixes, thanks to
+ Stefan at SuSE
+
+2002-09-27 Craig Small <csmall@small.dropbear.id.au>
+ * Changed a long to a long long in pstree.
+
+Changes in 21.2
+===============
+2002-09-27 Craig Small <csmall@small.dropbear.id.au>
+ * Big bug in pstree, pstree -a would often fail badly. swapped variable
+ not set.
+ * Removed pidof.1 and a variable not used.
+ * Thanks to Peter Breitenlohner for all this info and Adam Conrad for
+ the test ppc machine.
+
+Changes in 21.1
+===============
+2002-09-05 Craig Small <csmall@small.dropbear.id.au>
+ * Added SELINUX patches from Russell Coker
+
+2002-08-19 Craig Small <csmall@small.dropbear.id.au>
+ * Changed killall.1 to be less ambigous, Debian #127851
+
+2002-08-18
+ * Added patches from James Morrison so it works on Hurd
+ * Fixed UTF8 Problem. closes Debian #140960
+ * Return for fuser -k will mean no.
+
+2002-08-17
+ * Now has LFS support. Closes Debian #129157 and #156017
+ * Fixed pstree -a extra bracket problem, Closes Debian #96791
+
+2002-08-16 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.am (SUBDIRS): Add m4.
+ * Makefile.am (SUBDIRS): Remove intl.
+ (SUBDIRS): Remove intl.
+ (ACLOCAL_AMFLAGS): New variable.
+ (EXTRA_DIST): Add config.rpath.
+ * configure.in (AC_OUTPUT): Add po/Makefile.in,
+ (AC_OUTPUT): Remove intl/Makefile.
+
+ * config.guess and config.sub are no longer syminks
+
+
+Changes in 21 (15-MAY-2002)
+===========================
+ - signames.h is cleaned no more wrong signal types
+ - More translatable strings
+ - Added Portuguese Language (thanks to Edesio Costa e Silva)
+ - Added Italian Language (thanks to Daniele Pagano)
+ - Added French Language (thanks to Marc Léger)
+ - Added German Language (thanks to Wolfgang Schorer)
+ - Added Swedish Language (thanks to Joakim Mared)
+
+Changes in 20.2 (18-OCT-2001)
+=============================
+ - Added NLS/gettext
+ - fuser no longer assume st_dev is 0 for sockets, needed for kernel 2.4.12
+ and above, Thanks to Alexander Viro for the patch.
+ - Search both IPv4 and IPv6 namespaces.
+ - Added patch for pstree -u (SF Patch: #455932 )
+
+Changes in 20.1 (31-MAR-2001)
+=============================
+ - command line -<num> put back in.
+ - got rid of annoying "sending signal #" debug message
+ - updated killall.1
+ - updated killall usage
+ - verbose now tells you what signal it is killing with.
+
+Changes from 19 to 20 (14-DEC-2000)
+===================================
+ - New maintainer
+ - Uses automake/autoconf to determine things
+ - License changed to GPL
+ - signames.h generated better (suggested by Grant Erickson)
+ - uses getopt() for better command line stuff
+ - makes less assumptions about process name, closes Debian Bug #53337
+ - Doesn't use losetup for loop devices in fuser.
+ - Better selection of process name (thanks to David desJardins)
+
+Changes from version 18 to 19 (25-OCT-1999)
+===========================================
+
+ - pstree: "static int" was only "static" (fix by Jeremy Buhler)
+ - now uses cc -E instead of /lib/cpp (suggested by Kristofer Karas)
+ - fuser: -s conflicted with -k (reported by David Hinds)
+ - fuser: using -a with -s now yields an error
+ - added a sanity check for signames.h (suggested by John Summerfield)
+ - only "signals" < 100 are now added to signames.h, eliminating SIGSTKSZ
+
+
+Changes from version 17 to 18 (1-NOV-1998)
+==========================================
+
+ - fuser: usage summary listed -s (silent) as -q
+ - fuser: fuser x/y yielded confusing error message if x/y doesn't exist
+ (reported by Tigran Aivazian)
+ - fuser: new option -i for interactive killing (like killall -i)
+ - killall: tried to print a NULL pointer if full process name was unavailable
+ and killing failed
+ - killall: new option -g to kill process group instead of process
+ - killall: cosmetic PROC_BASE changes (by Florian La Roche)
+ - pidof: new option -g to show PGID instead of PID (by Florian La Roche)
+ - pstree: new option -H to highlight process specified by PID
+ - added -D_GNU_SOURCE to CFLAGS for glibc 2 compatibility
+ - Makefile should now also work with bash-2
+
+
+Changes from version 16 to 17 (17-FEB-1998)
+===========================================
+
+ - fuser: now also handles /proc of recent 2.1 kernels (fix by Andreas Schwab;
+ other fixed also proposed by Chris Wedgwood and Luca Berra)
+ - pstree now properly handles init with PID = PPID = 1
+ - fuser: no longer changes the name space for relative paths ending with the
+ name of a name space (e.g. something/tcp)
+ - fuser: now also reports mount points, swap files, and loop mounts
+ - updated the fuser man page
+ - killall: new option -w to wait for the killed processes to die
+ - killall: didn't handle malloc failure
+
+
+Changes from version 15 to 16 (28-JUL-1997)
+===========================================
+
+ - killall: now gets the list of all PIDs before killing processes, thereby
+ avoiding race between readdir and /proc (found by Boris Zentner)
+ - make install no longer changes BINDIR and MANDIR if they already exist
+ - changed psmisc.<version>.lsm to psmisc-<version>.lsm for consistency
+
+
+Changes from version 14 to 15 (16-JUN-1997)
+===========================================
+
+ - killall: killall -v didn't print the command name (fixed by Marty Leisner)
+ - fuser: fuser -a <unix_domain_socket> could crash (reported by Helmut Geyer)
+ - fuser: fuser -m didn't consider UNIX domain sockets (fix based on a patch by
+ Andries Brouwer)
+ - fuser: fuser -a /a /a /b no longer merges the first two entries
+ - changed package name format from psmisc.<version> to psmisc-<version> to
+ avoid annoyance messages from sunsite's archive scripts
+
+
+Changes from version 13 to 14 (19-APR-1997)
+===========================================
+
+ - killall: command-line parser didn't accept -signal (fixed by Chris Wedgwood)
+ - pidof: minor man page correction
+ - Makefile: pidof is now only installed when running make install-pidof
+ - added a file with installation instructions (INSTALL)
+
+
+Changes from version 12 to 13 (16-APR-1997)
+===========================================
+
+ - fuser: didn't check for out of memory condition after malloc (oops !)
+ - fuser: INET domain sockets can now be specified as
+ [local_port][,[remote_host][,[remote_port]]]
+ - fuser: now includes linux/kdev_t.h instead of linux/fs.h. This may break
+ compilation with some ancient kernels.
+ - killall: new option -q to suppress error message if no process was found
+ - killall: man page didn't reset font properly
+ - killall: now tries harder to handle very long names (> 15 characters)
+ (proposed by Erik Thiele)
+ - killall: new option -e to require exact name match
+ - killall: now lists PIDs if invoked as "pidof" (proposed by Peter Daum)
+ - minor Makefile change to eliminate need to patch for some versions of Linux
+
+
+Changes from version 11 to 12 (7-APR-1996)
+==========================================
+
+ - fuser is now able to look up INET and UNIX domain sockets
+ - pstree: new option -n to sort its output by PID
+ - pstree: new option -G to use VT100 line drawing characters
+
+
+Changes from version 10 to 11 (20-SEP-1995)
+===========================================
+
+ - added VERSION file
+ - size of command name is now defined in comm.h - the old approach of
+ obtaining values from linux/sched.h:struct task_struct doesn't work anymore)
+ - signames.h is now generated from cpp output (linux/signals.h no longer
+ defines them)
+ - all commands now print the version number when invoked with the -V option
+ - signames.h added to make clean
+ - removed use of {,} expansion in mkdist
+ - various minor documentation fixes
+
+
+Changes from version 9 to 10 (28-MAR-1995)
+==========================================
+
+ - fuser: now prints header before first path (used to be on same line)
+ - fuser: fixed line wrapping for long paths (used to wrap too early)
+ - fuser: fixed a NULL pointer dereference in add_file
+ - pstree: now outputs strings obtained from termcap with tputs
+ - some cosmetic changes (to avoid certain warnings if using -Wconversion)
+ - updated e-mail address in README
+
+Changes from version 8 to 9 (22-JAN-1995)
+=========================================
+
+ - fuser: now works with Plan 9 semantics (i.e. what recent kernels use;
+ reported by Harald Koenig, Nick Simicich, and others)
+ - fuser: now also scans /proc/*/maps
+ - fuser: fixed NULL pointer dereferencing when processes are created while
+ fuser is running (fix by Pauline Middelink)
+ - fuser: now resets effective uid to real uid before killing, thereby making
+ suid installation a smaller security risk
+ - pstree: fixed process tree truncation (fix by Andreas Schwab)
+ - pstree: added support for UTF-8 line drawing characters (adapted a patch by
+ Johan Myreen)
+ - killall.1 now warns about potential compatibility problems with killall
+ on other systems (proposed by Christos Ricudis)
+ - added a copyright notice
+ - updated e-mail address
+
+Changes from version 7 to 8 (11-OCT-1994)
+=========================================
+
+ - pstree: added -a to display command line arguments
+ - pstree, fuser and killall: display an error message if /proc has
+ no process entries (i.e. if it is not mounted)
+ - killall: more detailed usage output
+ - killall: added killing by file
+ - fuser and killall: fixed generation of signal list to include SIGUSR[12]
+ - fuser: now also accepts signal numbers
+ - "make install": now also installs man pages; executable permissions changed
+ from 755 to 555; now installs fuser in /bin, killall and pstree in /usr/bin
+ - "make spotless": fixed typo
+ - man pages: minor corrections and improvements
+
+Changes from version 6 to 7
+===========================
+
+ - pstree: -h didn't work because of incorrect termcap usage
+ - pstree: changed branch drawing from --- to -+-
+ \- `-
+ - pstree: fixed indentation inside compacted subtrees
+ - fuser and killall: don't kill themselves
+ - fuser: suppresses m(map) if file is e(xecuted)
+ - mkdist now includes itself
+ - minor updates on all man pages
+
+Changes from version 5 to 6
+===========================
+
+ - pstree: unknown display width expressed as zero width (TIOCGWINSZ) is
+ now correctly handled.
+ - fuser: added -s for silent operation.
+ - fuser: added non-zero return code if no processes using any file are
+ found.
+ - pstree and fuser: non-printable characters in command names (fuser: also
+ in file names) are now shown as \nnn (octal). \ is shown as \\.
+ - added "install" target to Makefile to install binaries in /usr/local/bin
+ - minor updates on all man pages.
+
+Changes from version 4 to 5
+===========================
+
+ - killall: added interactive and verbose modes (options -i and -v)
+ - fuser: added 0.99pl11 support (changed /proc/*/lib to /proc/*/mmap)
+ - fuser: mmap'ed files and shared libraries are now marked with "m"
+ (shlibs were marked with "s" and mmap'ed files weren't marked
+ at all)
+
+Changes from version 3 to 4
+===========================
+
+ - killall and fuser: now accept signal numbers too.
+ - pstree: added listing of process trees by user name.
+ - pstree: compaction sometimes generated wrong output.
+ - fuser: did only recognize the first occurrence of a file when using
+ the options -u or -v.
+ - changed Makefile to create stripped impure executables.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..bb6364a
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,137 @@
+
+AM_CPPFLAGS = \
+ -Wall \
+ -DLOCALEDIR=\"$(localedir)\" \
+ -I$(top_builddir)/src \
+ @HARDEN_CFLAGS@
+
+AM_LDFLAGS = @HARDEN_LDFLAGS@
+
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = \
+ doc \
+ po \
+ icons \
+ man-po \
+ testsuite
+
+bin_PROGRAMS = \
+ src/killall \
+ src/pslog \
+ src/prtstat \
+ src/pstree
+
+dist_man_MANS = \
+ doc/killall.1 \
+ doc/pslog.1 \
+ doc/prtstat.1 \
+ doc/pstree.1 \
+ doc/peekfd.1
+
+EXTRA_DIST = \
+ src/signames.c \
+ README.md \
+ misc/git-version-gen
+
+if WANT_FUSER
+ bin_PROGRAMS += src/fuser
+ dist_man_MANS += doc/fuser.1
+else
+ EXTRA_DIST += doc/fuser.1
+endif
+
+if WANT_PEEKFD_I386
+ bin_PROGRAMS += src/peekfd
+ AM_CPPFLAGS += -DI386
+endif
+if WANT_PEEKFD_X86_64
+ bin_PROGRAMS += src/peekfd
+ AM_CPPFLAGS += -DX86_64
+endif
+if WANT_PEEKFD_PPC
+ bin_PROGRAMS += src/peekfd
+ AM_CPPFLAGS += -DPPC
+endif
+if WANT_PEEKFD_ARM
+ bin_PROGRAMS += src/peekfd
+ AM_CPPFLAGS += -DARM
+endif
+
+if WANT_PEEKFD_ARM64
+ bin_PROGRAMS += src/peekfd
+ AM_CPPFLAGS += -DARM64
+endif
+
+if WANT_PEEKFD_MIPS
+ bin_PROGRAMS += src/peekfd
+ AM_CPPFLAGS += -DMIPS
+endif
+if WANT_PEEKFD_M68K
+ bin_PROGRAMS += src/peekfd
+ AM_CPPFLAGS += -DM68K
+endif
+
+src_fuser_SOURCES = \
+ src/fuser.c \
+ src/comm.h \
+ src/signals.c \
+ src/signals.h \
+ src/i18n.h \
+ src/fuser.h \
+ src/lists.h
+
+#if HAVE_SYSCALL_STATX
+src_fuser_SOURCES += src/statx.c src/statx.h
+#endif
+src_fuser_LDADD = @LIBINTL@
+src_killall_SOURCES = src/killall.c src/comm.h src/signals.c src/signals.h src/i18n.h
+src_killall_LDADD = @LIBINTL@ @DL_LIB@
+src_peekfd_SOURCES = src/peekfd.c
+src_peekfd_LDADD = @LIBINTL@
+src_pslog_SOURCES = src/pslog.c
+src_pstree_SOURCES = src/pstree.c src/comm.h src/i18n.h
+src_pstree_LDADD = @LIBINTL@ @TERMCAP_LIB@
+src_prtstat_SOURCES = src/prtstat.c src/prtstat.h
+src_prtstat_LDADD = @LIBINTL@
+nodist_src_killall_SOURCES = signames.h
+
+BUILT_SOURCES = src/signames.h .version
+
+
+CLEANFILES = src/signames.h .version
+
+src/signames.h: src/signames.c Makefile src/$(am__dirstamp)
+ export LC_ALL=C ; \
+ @CPP@ @CPPFLAGS@ -dM $< |\
+ tr -s '\t ' ' ' | sort -n -k 3 | sed \
+ 's:#define SIG\([A-Z][A-Z]*[0-9]*\) \([0-9][0-9]*\).*$\:{\ \2,"\1" },:p;d' | \
+ grep -v '[0-9][0-9][0-9]' >$@ || \
+ { rm -f $@; exit 1; }
+ grep '^{ 1,"HUP" },$$' $@ >/dev/null || \
+ { rm -f $@; exit 1; }
+
+src/signals.c: src/signames.h
+
+.version:
+ echo $(VERSION) > $@-t && mv $@-t $@
+
+install-exec-hook:
+ cd $(DESTDIR)$(bindir) && \
+ ( [ -h pstree.x11 ] || $(LN_S) pstree pstree.x11)
+dist-hook:
+ echo $(VERSION) > $(distdir)/.tarball-version
+
+get-trans:
+ rsync -Lrtvz translationproject.org::tp/latest/psmisc/ po
+ rsync -Lrtvz translationproject.org::tp/latest/psmisc-man/ man-po
+ rm -f man-po/man.stamp
+ make -C man-po man.stamp
+
+# Programs required for testing only
+check_PROGRAMS = \
+ src/socket_test
+
+src_socket_test_SOURCES = src/socket_test.c
+
+check: $(check_PROGRAMS) $(PROGRAMS)
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..51eb2c6
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,1224 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = src/killall$(EXEEXT) src/pslog$(EXEEXT) \
+ src/prtstat$(EXEEXT) src/pstree$(EXEEXT) $(am__EXEEXT_1) \
+ $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \
+ $(am__EXEEXT_5) $(am__EXEEXT_6) $(am__EXEEXT_7) \
+ $(am__EXEEXT_8)
+@WANT_FUSER_TRUE@am__append_1 = src/fuser
+@WANT_FUSER_TRUE@am__append_2 = doc/fuser.1
+@WANT_FUSER_FALSE@am__append_3 = doc/fuser.1
+@WANT_PEEKFD_I386_TRUE@am__append_4 = src/peekfd
+@WANT_PEEKFD_I386_TRUE@am__append_5 = -DI386
+@WANT_PEEKFD_X86_64_TRUE@am__append_6 = src/peekfd
+@WANT_PEEKFD_X86_64_TRUE@am__append_7 = -DX86_64
+@WANT_PEEKFD_PPC_TRUE@am__append_8 = src/peekfd
+@WANT_PEEKFD_PPC_TRUE@am__append_9 = -DPPC
+@WANT_PEEKFD_ARM_TRUE@am__append_10 = src/peekfd
+@WANT_PEEKFD_ARM_TRUE@am__append_11 = -DARM
+@WANT_PEEKFD_ARM64_TRUE@am__append_12 = src/peekfd
+@WANT_PEEKFD_ARM64_TRUE@am__append_13 = -DARM64
+@WANT_PEEKFD_MIPS_TRUE@am__append_14 = src/peekfd
+@WANT_PEEKFD_MIPS_TRUE@am__append_15 = -DMIPS
+@WANT_PEEKFD_M68K_TRUE@am__append_16 = src/peekfd
+@WANT_PEEKFD_M68K_TRUE@am__append_17 = -DM68K
+check_PROGRAMS = src/socket_test$(EXEEXT)
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@WANT_FUSER_TRUE@am__EXEEXT_1 = src/fuser$(EXEEXT)
+@WANT_PEEKFD_I386_TRUE@am__EXEEXT_2 = src/peekfd$(EXEEXT)
+@WANT_PEEKFD_X86_64_TRUE@am__EXEEXT_3 = src/peekfd$(EXEEXT)
+@WANT_PEEKFD_PPC_TRUE@am__EXEEXT_4 = src/peekfd$(EXEEXT)
+@WANT_PEEKFD_ARM_TRUE@am__EXEEXT_5 = src/peekfd$(EXEEXT)
+@WANT_PEEKFD_ARM64_TRUE@am__EXEEXT_6 = src/peekfd$(EXEEXT)
+@WANT_PEEKFD_MIPS_TRUE@am__EXEEXT_7 = src/peekfd$(EXEEXT)
+@WANT_PEEKFD_M68K_TRUE@am__EXEEXT_8 = src/peekfd$(EXEEXT)
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__dirstamp = $(am__leading_dot)dirstamp
+am_src_fuser_OBJECTS = src/fuser.$(OBJEXT) src/signals.$(OBJEXT) \
+ src/statx.$(OBJEXT)
+src_fuser_OBJECTS = $(am_src_fuser_OBJECTS)
+src_fuser_DEPENDENCIES =
+am_src_killall_OBJECTS = src/killall.$(OBJEXT) src/signals.$(OBJEXT)
+nodist_src_killall_OBJECTS =
+src_killall_OBJECTS = $(am_src_killall_OBJECTS) \
+ $(nodist_src_killall_OBJECTS)
+src_killall_DEPENDENCIES =
+am_src_peekfd_OBJECTS = src/peekfd.$(OBJEXT)
+src_peekfd_OBJECTS = $(am_src_peekfd_OBJECTS)
+src_peekfd_DEPENDENCIES =
+am_src_prtstat_OBJECTS = src/prtstat.$(OBJEXT)
+src_prtstat_OBJECTS = $(am_src_prtstat_OBJECTS)
+src_prtstat_DEPENDENCIES =
+am_src_pslog_OBJECTS = src/pslog.$(OBJEXT)
+src_pslog_OBJECTS = $(am_src_pslog_OBJECTS)
+src_pslog_LDADD = $(LDADD)
+am_src_pstree_OBJECTS = src/pstree.$(OBJEXT)
+src_pstree_OBJECTS = $(am_src_pstree_OBJECTS)
+src_pstree_DEPENDENCIES =
+am_src_socket_test_OBJECTS = src/socket_test.$(OBJEXT)
+src_socket_test_OBJECTS = $(am_src_socket_test_OBJECTS)
+src_socket_test_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = src/$(DEPDIR)/fuser.Po src/$(DEPDIR)/killall.Po \
+ src/$(DEPDIR)/peekfd.Po src/$(DEPDIR)/prtstat.Po \
+ src/$(DEPDIR)/pslog.Po src/$(DEPDIR)/pstree.Po \
+ src/$(DEPDIR)/signals.Po src/$(DEPDIR)/socket_test.Po \
+ src/$(DEPDIR)/statx.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(src_fuser_SOURCES) $(src_killall_SOURCES) \
+ $(nodist_src_killall_SOURCES) $(src_peekfd_SOURCES) \
+ $(src_prtstat_SOURCES) $(src_pslog_SOURCES) \
+ $(src_pstree_SOURCES) $(src_socket_test_SOURCES)
+DIST_SOURCES = $(src_fuser_SOURCES) $(src_killall_SOURCES) \
+ $(src_peekfd_SOURCES) $(src_prtstat_SOURCES) \
+ $(src_pslog_SOURCES) $(src_pstree_SOURCES) \
+ $(src_socket_test_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ cscope distdir distdir-am dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
+ config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
+ $(srcdir)/config.h.in ABOUT-NLS AUTHORS COPYING ChangeLog NEWS \
+ README compile config.guess config.rpath config.sub depcomp \
+ install-sh missing
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+GZIP_ENV = --best
+DIST_ARCHIVES = $(distdir).tar.xz
+DIST_TARGETS = dist-xz
+# Exists only to be overridden by the user if desired.
+AM_DISTCHECK_DVI_TARGET = dvi
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEJAGNU = @DEJAGNU@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HARDEN_CFLAGS = @HARDEN_CFLAGS@
+HARDEN_LDFLAGS = @HARDEN_LDFLAGS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PO4A = @PO4A@
+POSUB = @POSUB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMCAP_LIB = @TERMCAP_LIB@
+USE_NLS = @USE_NLS@
+USE_PO4A = @USE_PO4A@
+VERSION = @VERSION@
+WITH_AppArmor = @WITH_AppArmor@
+WITH_IPV6 = @WITH_IPV6@
+WITH_SELINUX = @WITH_SELINUX@
+WITH_STATX = @WITH_STATX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -Wall -DLOCALEDIR=\"$(localedir)\" -I$(top_builddir)/src \
+ @HARDEN_CFLAGS@ $(am__append_5) $(am__append_7) \
+ $(am__append_9) $(am__append_11) $(am__append_13) \
+ $(am__append_15) $(am__append_17)
+AM_LDFLAGS = @HARDEN_LDFLAGS@
+ACLOCAL_AMFLAGS = -I m4
+SUBDIRS = \
+ doc \
+ po \
+ icons \
+ man-po \
+ testsuite
+
+dist_man_MANS = doc/killall.1 doc/pslog.1 doc/prtstat.1 doc/pstree.1 \
+ doc/peekfd.1 $(am__append_2)
+EXTRA_DIST = src/signames.c README.md misc/git-version-gen \
+ $(am__append_3)
+
+#if HAVE_SYSCALL_STATX
+src_fuser_SOURCES = src/fuser.c src/comm.h src/signals.c src/signals.h \
+ src/i18n.h src/fuser.h src/lists.h src/statx.c src/statx.h
+#endif
+src_fuser_LDADD = @LIBINTL@
+src_killall_SOURCES = src/killall.c src/comm.h src/signals.c src/signals.h src/i18n.h
+src_killall_LDADD = @LIBINTL@ @DL_LIB@
+src_peekfd_SOURCES = src/peekfd.c
+src_peekfd_LDADD = @LIBINTL@
+src_pslog_SOURCES = src/pslog.c
+src_pstree_SOURCES = src/pstree.c src/comm.h src/i18n.h
+src_pstree_LDADD = @LIBINTL@ @TERMCAP_LIB@
+src_prtstat_SOURCES = src/prtstat.c src/prtstat.h
+src_prtstat_LDADD = @LIBINTL@
+nodist_src_killall_SOURCES = signames.h
+BUILT_SOURCES = src/signames.h .version
+CLEANFILES = src/signames.h .version
+src_socket_test_SOURCES = src/socket_test.c
+all: $(BUILT_SOURCES) config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @test -f $@ || rm -f stamp-h1
+ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+clean-checkPROGRAMS:
+ -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
+src/$(am__dirstamp):
+ @$(MKDIR_P) src
+ @: > src/$(am__dirstamp)
+src/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/$(DEPDIR)
+ @: > src/$(DEPDIR)/$(am__dirstamp)
+src/fuser.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/signals.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/statx.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+
+src/fuser$(EXEEXT): $(src_fuser_OBJECTS) $(src_fuser_DEPENDENCIES) $(EXTRA_src_fuser_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/fuser$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(src_fuser_OBJECTS) $(src_fuser_LDADD) $(LIBS)
+src/killall.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+
+src/killall$(EXEEXT): $(src_killall_OBJECTS) $(src_killall_DEPENDENCIES) $(EXTRA_src_killall_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/killall$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(src_killall_OBJECTS) $(src_killall_LDADD) $(LIBS)
+src/peekfd.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+
+src/peekfd$(EXEEXT): $(src_peekfd_OBJECTS) $(src_peekfd_DEPENDENCIES) $(EXTRA_src_peekfd_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/peekfd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(src_peekfd_OBJECTS) $(src_peekfd_LDADD) $(LIBS)
+src/prtstat.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+
+src/prtstat$(EXEEXT): $(src_prtstat_OBJECTS) $(src_prtstat_DEPENDENCIES) $(EXTRA_src_prtstat_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/prtstat$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(src_prtstat_OBJECTS) $(src_prtstat_LDADD) $(LIBS)
+src/pslog.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+
+src/pslog$(EXEEXT): $(src_pslog_OBJECTS) $(src_pslog_DEPENDENCIES) $(EXTRA_src_pslog_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/pslog$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(src_pslog_OBJECTS) $(src_pslog_LDADD) $(LIBS)
+src/pstree.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+
+src/pstree$(EXEEXT): $(src_pstree_OBJECTS) $(src_pstree_DEPENDENCIES) $(EXTRA_src_pstree_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/pstree$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(src_pstree_OBJECTS) $(src_pstree_LDADD) $(LIBS)
+src/socket_test.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+
+src/socket_test$(EXEEXT): $(src_socket_test_OBJECTS) $(src_socket_test_DEPENDENCIES) $(EXTRA_src_socket_test_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/socket_test$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(src_socket_test_OBJECTS) $(src_socket_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f src/*.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/fuser.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/killall.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/peekfd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/prtstat.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/pslog.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/pstree.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/signals.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/socket_test.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/statx.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+install-man1: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(dist_man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-zstd: distdir
+ tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ *.tar.zst*) \
+ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(PROGRAMS) $(MANS) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f src/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f src/$(DEPDIR)/fuser.Po
+ -rm -f src/$(DEPDIR)/killall.Po
+ -rm -f src/$(DEPDIR)/peekfd.Po
+ -rm -f src/$(DEPDIR)/prtstat.Po
+ -rm -f src/$(DEPDIR)/pslog.Po
+ -rm -f src/$(DEPDIR)/pstree.Po
+ -rm -f src/$(DEPDIR)/signals.Po
+ -rm -f src/$(DEPDIR)/socket_test.Po
+ -rm -f src/$(DEPDIR)/statx.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f src/$(DEPDIR)/fuser.Po
+ -rm -f src/$(DEPDIR)/killall.Po
+ -rm -f src/$(DEPDIR)/peekfd.Po
+ -rm -f src/$(DEPDIR)/prtstat.Po
+ -rm -f src/$(DEPDIR)/pslog.Po
+ -rm -f src/$(DEPDIR)/pstree.Po
+ -rm -f src/$(DEPDIR)/signals.Po
+ -rm -f src/$(DEPDIR)/socket_test.Po
+ -rm -f src/$(DEPDIR)/statx.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: $(am__recursive_targets) all check check-am install install-am \
+ install-exec install-exec-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles am--refresh check check-am clean \
+ clean-binPROGRAMS clean-checkPROGRAMS clean-cscope \
+ clean-generic cscope cscopelist-am ctags ctags-am dist \
+ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
+ dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \
+ distclean-compile distclean-generic distclean-hdr \
+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-exec-hook \
+ install-html install-html-am install-info install-info-am \
+ install-man install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-binPROGRAMS uninstall-man \
+ uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+src/signames.h: src/signames.c Makefile src/$(am__dirstamp)
+ export LC_ALL=C ; \
+ @CPP@ @CPPFLAGS@ -dM $< |\
+ tr -s '\t ' ' ' | sort -n -k 3 | sed \
+ 's:#define SIG\([A-Z][A-Z]*[0-9]*\) \([0-9][0-9]*\).*$\:{\ \2,"\1" },:p;d' | \
+ grep -v '[0-9][0-9][0-9]' >$@ || \
+ { rm -f $@; exit 1; }
+ grep '^{ 1,"HUP" },$$' $@ >/dev/null || \
+ { rm -f $@; exit 1; }
+
+src/signals.c: src/signames.h
+
+.version:
+ echo $(VERSION) > $@-t && mv $@-t $@
+
+install-exec-hook:
+ cd $(DESTDIR)$(bindir) && \
+ ( [ -h pstree.x11 ] || $(LN_S) pstree pstree.x11)
+dist-hook:
+ echo $(VERSION) > $(distdir)/.tarball-version
+
+get-trans:
+ rsync -Lrtvz translationproject.org::tp/latest/psmisc/ po
+ rsync -Lrtvz translationproject.org::tp/latest/psmisc-man/ man-po
+ rm -f man-po/man.stamp
+ make -C man-po man.stamp
+
+check: $(check_PROGRAMS) $(PROGRAMS)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..631231c
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,3 @@
+Important NEWS for psmisc package
+=================================
+
diff --git a/README b/README
new file mode 100644
index 0000000..96dc92f
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+See README.md
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e076b7c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,51 @@
+# psmisc
+
+A package of small utilities that use the proc file-system.
+
+* *fuser* - Identifies processes using files or sockets
+* *killall* - kills processes by name, e.g. killall -HUP named
+* *prtstat* - prints statistics of a process
+* *pslog* - prints log path(s) of a process
+* *pstree* - shows the currently running processes as a tree
+* *peekfd* - shows the data travelling over a file descriptor
+
+## Getting latest source
+There are two ways of getting the latest source.
+
+### GitLab
+For the latest **psmisc** source, visit the
+[GitLab psmisc page](https://gitlab.com/psmisc/psmisc)
+
+### SourceForge
+There are also tarballs found on
+[SourceForge](https://sourceforge.net/projects/psmisc/files/psmisc/). The
+reason these exist is the tarballs contain extra generated files. It's
+reasonably easy to generate those files anyhow.
+
+## Getting Help
+There is no email list, but there is both an
+[Issue Tracker](https://gitlab.com/psmisc/psmisc/-/issues) and
+[Merge Request Tracker](https://gitlab.com/psmisc/psmisc/-/merge_requests).
+
+I'm also trying out a Matrix room [#psmisc](https://matrix.to/#/#psmisc:dropbear.xyz)
+so we will see how it goes.
+
+## Credits
+
+### Translations
+My thanks for the various translators who have cheerfully given me the po
+files to make psmisc speak different languages. If your language is not
+supported then let me know, all it takes is translating one file in
+a certain manner. The current status of the translations can be found on
+the [Translation Project](https://translationproject.org/domain/psmisc.html)
+website.
+
+### Icons
+The pstree icons were drawn by Tatlin at Coresis who has given permission
+for them to be used for psmisc.
+
+## Copyright Change
+The license has changed to GPL for version 20 onwards with permission
+of the original authors. People who want to use these programs under
+the previous license will have to look at psmisc 19 or below.
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..ab7e6f5
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1160 @@
+# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],,
+[m4_warning([this file was generated for autoconf 2.71.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.16'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.16.5], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.16.5])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE="gmake" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+m4_ifdef([_$0_ALREADY_INIT],
+ [m4_fatal([$0 expanded multiple times
+]m4_defn([_$0_ALREADY_INIT]))],
+ [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+ CTAGS=ctags
+fi
+AC_SUBST([CTAGS])
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+AC_SUBST([ETAGS])
+if test -z "$CSCOPE"; then
+ CSCOPE=cscope
+fi
+AC_SUBST([CSCOPE])
+
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/gettext.m4])
+m4_include([m4/host-cpu-c-abi.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/intlmacosx.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/nls.m4])
+m4_include([m4/po.m4])
+m4_include([m4/progtest.m4])
diff --git a/compile b/compile
new file mode 100755
index 0000000..df363c8
--- /dev/null
+++ b/compile
@@ -0,0 +1,348 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN* | MSYS*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/* | msys/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ if test -f "$dir/lib$lib.a"; then
+ found=yes
+ lib=$dir/lib$lib.a
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..7f76b62
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1754 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2022 Free Software Foundation, Inc.
+
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-09'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+#
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+#
+# Please send patches to <config-patches@gnu.org>.
+
+
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2022 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+# Just in case it came from the environment.
+GUESS=
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+ # prevent multiple calls if $tmp is already set
+ test "$tmp" && return 0
+ : "${TMPDIR=/tmp}"
+ # shellcheck disable=SC2039,SC3028
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+ dummy=$tmp/dummy
+ case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+ ,,) echo "int x;" > "$dummy.c"
+ for driver in cc gcc c89 c99 ; do
+ if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+ CC_FOR_BUILD=$driver
+ break
+ fi
+ done
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+ esac
+}
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if test -f /.attbin/uname ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case $UNAME_SYSTEM in
+Linux|GNU|GNU/*)
+ LIBC=unknown
+
+ set_cc_for_build
+ cat <<-EOF > "$dummy.c"
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #elif defined(__GLIBC__)
+ LIBC=gnu
+ #else
+ #include <stdarg.h>
+ /* First heuristic to detect musl libc. */
+ #ifdef __DEFINED_va_list
+ LIBC=musl
+ #endif
+ #endif
+ EOF
+ cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ eval "$cc_set_libc"
+
+ # Second heuristic to detect musl libc.
+ if [ "$LIBC" = unknown ] &&
+ command -v ldd >/dev/null &&
+ ldd --version 2>&1 | grep -q ^musl; then
+ LIBC=musl
+ fi
+
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ if [ "$LIBC" = unknown ]; then
+ LIBC=gnu
+ fi
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ echo unknown)`
+ case $UNAME_MACHINE_ARCH in
+ aarch64eb) machine=aarch64_be-unknown ;;
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
+ *) machine=$UNAME_MACHINE_ARCH-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently (or will in the future) and ABI.
+ case $UNAME_MACHINE_ARCH in
+ earm*)
+ os=netbsdelf
+ ;;
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # Determine ABI tags.
+ case $UNAME_MACHINE_ARCH in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case $UNAME_VERSION in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ GUESS=$machine-${os}${release}${abi-}
+ ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+ ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+ ;;
+ *:SecBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+ ;;
+ *:LibertyBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+ ;;
+ *:MidnightBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+ ;;
+ *:ekkoBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+ ;;
+ *:SolidBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+ ;;
+ *:OS108:*:*)
+ GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+ ;;
+ macppc:MirBSD:*:*)
+ GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+ ;;
+ *:MirBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+ ;;
+ *:Sortix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-sortix
+ ;;
+ *:Twizzler:*:*)
+ GUESS=$UNAME_MACHINE-unknown-twizzler
+ ;;
+ *:Redox:*:*)
+ GUESS=$UNAME_MACHINE-unknown-redox
+ ;;
+ mips:OSF1:*.*)
+ GUESS=mips-dec-osf1
+ ;;
+ alpha:OSF1:*:*)
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ trap '' 0
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case $ALPHA_CPU_TYPE in
+ "EV4 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE=alpha ;;
+ "EV5 (21164)")
+ UNAME_MACHINE=alphaev5 ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE=alphaev56 ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE=alphapca56 ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE=alphapca57 ;;
+ "EV6 (21264)")
+ UNAME_MACHINE=alphaev6 ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE=alphaev67 ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE=alphaev69 ;;
+ "EV7 (21364)")
+ UNAME_MACHINE=alphaev7 ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE=alphaev79 ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+ ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ GUESS=m68k-unknown-sysv4
+ ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ GUESS=$UNAME_MACHINE-unknown-amigaos
+ ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ GUESS=$UNAME_MACHINE-unknown-morphos
+ ;;
+ *:OS/390:*:*)
+ GUESS=i370-ibm-openedition
+ ;;
+ *:z/VM:*:*)
+ GUESS=s390-ibm-zvmoe
+ ;;
+ *:OS400:*:*)
+ GUESS=powerpc-ibm-os400
+ ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ GUESS=arm-acorn-riscix$UNAME_RELEASE
+ ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ GUESS=arm-unknown-riscos
+ ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ GUESS=hppa1.1-hitachi-hiuxmpp
+ ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ case `(/bin/universe) 2>/dev/null` in
+ att) GUESS=pyramid-pyramid-sysv3 ;;
+ *) GUESS=pyramid-pyramid-bsd ;;
+ esac
+ ;;
+ NILE*:*:*:dcosx)
+ GUESS=pyramid-pyramid-svr4
+ ;;
+ DRS?6000:unix:4.0:6*)
+ GUESS=sparc-icl-nx6
+ ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) GUESS=sparc-icl-nx7 ;;
+ esac
+ ;;
+ s390x:SunOS:*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+ ;;
+ sun4H:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-hal-solaris2$SUN_REL
+ ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris2$SUN_REL
+ ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ GUESS=i386-pc-auroraux$UNAME_RELEASE
+ ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ set_cc_for_build
+ SUN_ARCH=i386
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH=x86_64
+ fi
+ fi
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+ ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris3$SUN_REL
+ ;;
+ sun4*:SunOS:*:*)
+ case `/usr/bin/arch -k` in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+ GUESS=sparc-sun-sunos$SUN_REL
+ ;;
+ sun3*:SunOS:*:*)
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
+ case `/bin/arch` in
+ sun3)
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
+ sun4)
+ GUESS=sparc-sun-sunos$UNAME_RELEASE
+ ;;
+ esac
+ ;;
+ aushp:SunOS:*:*)
+ GUESS=sparc-auspex-sunos$UNAME_RELEASE
+ ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ GUESS=m68k-milan-mint$UNAME_RELEASE
+ ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ GUESS=m68k-hades-mint$UNAME_RELEASE
+ ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ GUESS=m68k-unknown-mint$UNAME_RELEASE
+ ;;
+ m68k:machten:*:*)
+ GUESS=m68k-apple-machten$UNAME_RELEASE
+ ;;
+ powerpc:machten:*:*)
+ GUESS=powerpc-apple-machten$UNAME_RELEASE
+ ;;
+ RISC*:Mach:*:*)
+ GUESS=mips-dec-mach_bsd4.3
+ ;;
+ RISC*:ULTRIX:*:*)
+ GUESS=mips-dec-ultrix$UNAME_RELEASE
+ ;;
+ VAX*:ULTRIX*:*:*)
+ GUESS=vax-dec-ultrix$UNAME_RELEASE
+ ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ GUESS=clipper-intergraph-clix$UNAME_RELEASE
+ ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
+ dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ GUESS=mips-mips-riscos$UNAME_RELEASE
+ ;;
+ Motorola:PowerMAX_OS:*:*)
+ GUESS=powerpc-motorola-powermax
+ ;;
+ Motorola:*:4.3:PL8-*)
+ GUESS=powerpc-harris-powermax
+ ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ GUESS=powerpc-harris-powermax
+ ;;
+ Night_Hawk:Power_UNIX:*:*)
+ GUESS=powerpc-harris-powerunix
+ ;;
+ m88k:CX/UX:7*:*)
+ GUESS=m88k-harris-cxux7
+ ;;
+ m88k:*:4*:R4*)
+ GUESS=m88k-motorola-sysv4
+ ;;
+ m88k:*:3*:R3*)
+ GUESS=m88k-motorola-sysv3
+ ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
+ then
+ if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+ test "$TARGET_BINARY_INTERFACE"x = x
+ then
+ GUESS=m88k-dg-dgux$UNAME_RELEASE
+ else
+ GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
+ fi
+ else
+ GUESS=i586-dg-dgux$UNAME_RELEASE
+ fi
+ ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ GUESS=m88k-dolphin-sysv3
+ ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ GUESS=m88k-motorola-sysv3
+ ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ GUESS=m88k-tektronix-sysv3
+ ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ GUESS=m68k-tektronix-bsd
+ ;;
+ *:IRIX*:*:*)
+ IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+ GUESS=mips-sgi-irix$IRIX_REL
+ ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ GUESS=i386-ibm-aix
+ ;;
+ ia64:AIX:*:*)
+ if test -x /usr/bin/oslevel ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
+ fi
+ GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+ ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
+ then
+ GUESS=$SYSTEM_NAME
+ else
+ GUESS=rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ GUESS=rs6000-ibm-aix3.2.4
+ else
+ GUESS=rs6000-ibm-aix3.2
+ fi
+ ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if test -x /usr/bin/lslpp ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+ else
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
+ fi
+ GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+ ;;
+ *:AIX:*:*)
+ GUESS=rs6000-ibm-aix
+ ;;
+ ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
+ GUESS=romp-ibm-bsd4.4
+ ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to
+ ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ GUESS=rs6000-bull-bosx
+ ;;
+ DPX/2?00:B.O.S.:*:*)
+ GUESS=m68k-bull-sysv3
+ ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ GUESS=m68k-hp-bsd
+ ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ GUESS=m68k-hp-bsd4.4
+ ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ case $UNAME_MACHINE in
+ 9000/31?) HP_ARCH=m68000 ;;
+ 9000/[34]??) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if test -x /usr/bin/getconf; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case $sc_cpu_version in
+ 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case $sc_kernel_bits in
+ 32) HP_ARCH=hppa2.0n ;;
+ 64) HP_ARCH=hppa2.0w ;;
+ '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if test "$HP_ARCH" = ""; then
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if test "$HP_ARCH" = hppa2.0w
+ then
+ set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH=hppa2.0w
+ else
+ HP_ARCH=hppa64
+ fi
+ fi
+ GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+ ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ GUESS=ia64-hp-hpux$HPUX_REV
+ ;;
+ 3050*:HI-UX:*:*)
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ GUESS=unknown-hitachi-hiuxwe2
+ ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
+ GUESS=hppa1.1-hp-bsd
+ ;;
+ 9000/8??:4.3bsd:*:*)
+ GUESS=hppa1.0-hp-bsd
+ ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ GUESS=hppa1.0-hp-mpeix
+ ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
+ GUESS=hppa1.1-hp-osf
+ ;;
+ hp8??:OSF1:*:*)
+ GUESS=hppa1.0-hp-osf
+ ;;
+ i*86:OSF1:*:*)
+ if test -x /usr/sbin/sysversion ; then
+ GUESS=$UNAME_MACHINE-unknown-osf1mk
+ else
+ GUESS=$UNAME_MACHINE-unknown-osf1
+ fi
+ ;;
+ parisc*:Lites*:*:*)
+ GUESS=hppa1.1-hp-lites
+ ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ GUESS=c1-convex-bsd
+ ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ GUESS=c34-convex-bsd
+ ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ GUESS=c38-convex-bsd
+ ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ GUESS=c4-convex-bsd
+ ;;
+ CRAY*Y-MP:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=ymp-cray-unicos$CRAY_REL
+ ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=t90-cray-unicos$CRAY_REL
+ ;;
+ CRAY*T3E:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=alphaev5-cray-unicosmk$CRAY_REL
+ ;;
+ CRAY*SV1:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=sv1-cray-unicos$CRAY_REL
+ ;;
+ *:UNICOS/mp:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=craynv-cray-unicosmp$CRAY_REL
+ ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
+ GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+ GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+ ;;
+ sparc*:BSD/OS:*:*)
+ GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+ ;;
+ *:BSD/OS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+ ;;
+ arm:FreeBSD:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ set_cc_for_build
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
+ else
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
+ fi
+ ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case $UNAME_PROCESSOR in
+ amd64)
+ UNAME_PROCESSOR=x86_64 ;;
+ i386)
+ UNAME_PROCESSOR=i586 ;;
+ esac
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+ ;;
+ i*:CYGWIN*:*)
+ GUESS=$UNAME_MACHINE-pc-cygwin
+ ;;
+ *:MINGW64*:*)
+ GUESS=$UNAME_MACHINE-pc-mingw64
+ ;;
+ *:MINGW*:*)
+ GUESS=$UNAME_MACHINE-pc-mingw32
+ ;;
+ *:MSYS*:*)
+ GUESS=$UNAME_MACHINE-pc-msys
+ ;;
+ i*:PW*:*)
+ GUESS=$UNAME_MACHINE-pc-pw32
+ ;;
+ *:SerenityOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-serenity
+ ;;
+ *:Interix*:*)
+ case $UNAME_MACHINE in
+ x86)
+ GUESS=i586-pc-interix$UNAME_RELEASE
+ ;;
+ authenticamd | genuineintel | EM64T)
+ GUESS=x86_64-unknown-interix$UNAME_RELEASE
+ ;;
+ IA64)
+ GUESS=ia64-unknown-interix$UNAME_RELEASE
+ ;;
+ esac ;;
+ i*:UWIN*:*)
+ GUESS=$UNAME_MACHINE-pc-uwin
+ ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ GUESS=x86_64-pc-cygwin
+ ;;
+ prep*:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=powerpcle-unknown-solaris2$SUN_REL
+ ;;
+ *:GNU:*:*)
+ # the GNU system
+ GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+ GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+ ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+ ;;
+ *:Minix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-minix
+ ;;
+ aarch64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arm*:Linux:*:*)
+ set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
+ else
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ ;;
+ avr32*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ cris:Linux:*:*)
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
+ crisv32:Linux:*:*)
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
+ e2k:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ frv:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ hexagon:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ i*86:Linux:*:*)
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+ ;;
+ ia64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ k1om:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ m32r*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ m68*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ set_cc_for_build
+ IS_GLIBC=0
+ test x"${LIBC}" = xgnu && IS_GLIBC=1
+ sed 's/^ //' << EOF > "$dummy.c"
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #undef mips64
+ #undef mips64el
+ #if ${IS_GLIBC} && defined(_ABI64)
+ LIBCABI=gnuabi64
+ #else
+ #if ${IS_GLIBC} && defined(_ABIN32)
+ LIBCABI=gnuabin32
+ #else
+ LIBCABI=${LIBC}
+ #endif
+ #endif
+
+ #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa64r6
+ #else
+ #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa32r6
+ #else
+ #if defined(__mips64)
+ CPU=mips64
+ #else
+ CPU=mips
+ #endif
+ #endif
+ #endif
+
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ MIPS_ENDIAN=el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ MIPS_ENDIAN=
+ #else
+ MIPS_ENDIAN=
+ #endif
+ #endif
+EOF
+ cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+ eval "$cc_set_vars"
+ test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
+ ;;
+ mips64el:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ openrisc*:Linux:*:*)
+ GUESS=or1k-unknown-linux-$LIBC
+ ;;
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ padre:Linux:*:*)
+ GUESS=sparc-unknown-linux-$LIBC
+ ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ GUESS=hppa64-unknown-linux-$LIBC
+ ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+ PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+ *) GUESS=hppa-unknown-linux-$LIBC ;;
+ esac
+ ;;
+ ppc64:Linux:*:*)
+ GUESS=powerpc64-unknown-linux-$LIBC
+ ;;
+ ppc:Linux:*:*)
+ GUESS=powerpc-unknown-linux-$LIBC
+ ;;
+ ppc64le:Linux:*:*)
+ GUESS=powerpc64le-unknown-linux-$LIBC
+ ;;
+ ppcle:Linux:*:*)
+ GUESS=powerpcle-unknown-linux-$LIBC
+ ;;
+ riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+ ;;
+ sh64*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ sh*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ tile*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ vax:Linux:*:*)
+ GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+ ;;
+ x86_64:Linux:*:*)
+ set_cc_for_build
+ LIBCABI=$LIBC
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_X32 >/dev/null
+ then
+ LIBCABI=${LIBC}x32
+ fi
+ fi
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
+ ;;
+ xtensa*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ GUESS=i386-sequent-sysv4
+ ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+ ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ GUESS=$UNAME_MACHINE-pc-os2-emx
+ ;;
+ i*86:XTS-300:*:STOP)
+ GUESS=$UNAME_MACHINE-unknown-stop
+ ;;
+ i*86:atheos:*:*)
+ GUESS=$UNAME_MACHINE-unknown-atheos
+ ;;
+ i*86:syllable:*:*)
+ GUESS=$UNAME_MACHINE-pc-syllable
+ ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ GUESS=i386-unknown-lynxos$UNAME_RELEASE
+ ;;
+ i*86:*DOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+ ;;
+ i*86:*:4.*:*)
+ UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
+ else
+ GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
+ fi
+ ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
+ else
+ GUESS=$UNAME_MACHINE-pc-sysv32
+ fi
+ ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configure will decide that
+ # this is a cross-build.
+ GUESS=i586-pc-msdosdjgpp
+ ;;
+ Intel:Mach:3*:*)
+ GUESS=i386-pc-mach3
+ ;;
+ paragon:*:*:*)
+ GUESS=i860-intel-osf1
+ ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4
+ fi
+ ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ GUESS=m68010-convergent-sysv
+ ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ GUESS=m68k-convergent-sysv
+ ;;
+ M680?0:D-NIX:5.3:*)
+ GUESS=m68k-diab-dnix
+ ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+ ;;
+ mc68030:UNIX_System_V:4.*:*)
+ GUESS=m68k-atari-sysv4
+ ;;
+ TSUNAMI:LynxOS:2.*:*)
+ GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+ ;;
+ rs6000:LynxOS:2.*:*)
+ GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+ ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+ ;;
+ SM[BE]S:UNIX_SV:*:*)
+ GUESS=mips-dde-sysv$UNAME_RELEASE
+ ;;
+ RM*:ReliantUNIX-*:*:*)
+ GUESS=mips-sni-sysv4
+ ;;
+ RM*:SINIX-*:*:*)
+ GUESS=mips-sni-sysv4
+ ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ GUESS=$UNAME_MACHINE-sni-sysv4
+ else
+ GUESS=ns32k-sni-sysv
+ fi
+ ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ GUESS=i586-unisys-sysv4
+ ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ GUESS=hppa1.1-stratus-sysv4
+ ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ GUESS=i860-stratus-sysv4
+ ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ GUESS=$UNAME_MACHINE-stratus-vos
+ ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ GUESS=hppa1.1-stratus-vos
+ ;;
+ mc68*:A/UX:*:*)
+ GUESS=m68k-apple-aux$UNAME_RELEASE
+ ;;
+ news*:NEWS-OS:6*:*)
+ GUESS=mips-sony-newsos6
+ ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if test -d /usr/nec; then
+ GUESS=mips-nec-sysv$UNAME_RELEASE
+ else
+ GUESS=mips-unknown-sysv$UNAME_RELEASE
+ fi
+ ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ GUESS=powerpc-be-beos
+ ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ GUESS=powerpc-apple-beos
+ ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ GUESS=i586-pc-beos
+ ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ GUESS=i586-pc-haiku
+ ;;
+ x86_64:Haiku:*:*)
+ GUESS=x86_64-unknown-haiku
+ ;;
+ SX-4:SUPER-UX:*:*)
+ GUESS=sx4-nec-superux$UNAME_RELEASE
+ ;;
+ SX-5:SUPER-UX:*:*)
+ GUESS=sx5-nec-superux$UNAME_RELEASE
+ ;;
+ SX-6:SUPER-UX:*:*)
+ GUESS=sx6-nec-superux$UNAME_RELEASE
+ ;;
+ SX-7:SUPER-UX:*:*)
+ GUESS=sx7-nec-superux$UNAME_RELEASE
+ ;;
+ SX-8:SUPER-UX:*:*)
+ GUESS=sx8-nec-superux$UNAME_RELEASE
+ ;;
+ SX-8R:SUPER-UX:*:*)
+ GUESS=sx8r-nec-superux$UNAME_RELEASE
+ ;;
+ SX-ACE:SUPER-UX:*:*)
+ GUESS=sxace-nec-superux$UNAME_RELEASE
+ ;;
+ Power*:Rhapsody:*:*)
+ GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+ ;;
+ *:Rhapsody:*:*)
+ GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+ ;;
+ arm64:Darwin:*:*)
+ GUESS=aarch64-apple-darwin$UNAME_RELEASE
+ ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ if command -v xcode-select > /dev/null 2> /dev/null && \
+ ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+ # Avoid executing cc if there is no toolchain installed as
+ # cc will be a stub that puts up a graphical alert
+ # prompting the user to install developer tools.
+ CC_FOR_BUILD=no_compiler_found
+ else
+ set_cc_for_build
+ fi
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # uname -m returns i386 or x86_64
+ UNAME_PROCESSOR=$UNAME_MACHINE
+ fi
+ GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+ ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = x86; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+ ;;
+ *:QNX:*:4*)
+ GUESS=i386-pc-qnx
+ ;;
+ NEO-*:NONSTOP_KERNEL:*:*)
+ GUESS=neo-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ GUESS=nse-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSR-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsr-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSV-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsv-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSX-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsx-tandem-nsk$UNAME_RELEASE
+ ;;
+ *:NonStop-UX:*:*)
+ GUESS=mips-compaq-nonstopux
+ ;;
+ BS2000:POSIX*:*:*)
+ GUESS=bs2000-siemens-sysv
+ ;;
+ DS/*:UNIX_System_V:*:*)
+ GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+ ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "${cputype-}" = 386; then
+ UNAME_MACHINE=i386
+ elif test "x${cputype-}" != x; then
+ UNAME_MACHINE=$cputype
+ fi
+ GUESS=$UNAME_MACHINE-unknown-plan9
+ ;;
+ *:TOPS-10:*:*)
+ GUESS=pdp10-unknown-tops10
+ ;;
+ *:TENEX:*:*)
+ GUESS=pdp10-unknown-tenex
+ ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ GUESS=pdp10-dec-tops20
+ ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ GUESS=pdp10-xkl-tops20
+ ;;
+ *:TOPS-20:*:*)
+ GUESS=pdp10-unknown-tops20
+ ;;
+ *:ITS:*:*)
+ GUESS=pdp10-unknown-its
+ ;;
+ SEI:*:*:SEIUX)
+ GUESS=mips-sei-seiux$UNAME_RELEASE
+ ;;
+ *:DragonFly:*:*)
+ DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+ ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case $UNAME_MACHINE in
+ A*) GUESS=alpha-dec-vms ;;
+ I*) GUESS=ia64-dec-vms ;;
+ V*) GUESS=vax-dec-vms ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ GUESS=i386-pc-xenix
+ ;;
+ i*86:skyos:*:*)
+ SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+ GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+ ;;
+ i*86:rdos:*:*)
+ GUESS=$UNAME_MACHINE-pc-rdos
+ ;;
+ i*86:Fiwix:*:*)
+ GUESS=$UNAME_MACHINE-pc-fiwix
+ ;;
+ *:AROS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-aros
+ ;;
+ x86_64:VMkernel:*:*)
+ GUESS=$UNAME_MACHINE-unknown-esx
+ ;;
+ amd64:Isilon\ OneFS:*:*)
+ GUESS=x86_64-unknown-onefs
+ ;;
+ *:Unleashed:*:*)
+ GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+ ;;
+esac
+
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+ echo "$GUESS"
+ exit
+fi
+
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname un;
+ uname (&un);
+ printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname *un;
+ uname (&un);
+ printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
+echo "$0: unable to guess system type" >&2
+
+case $UNAME_MACHINE:$UNAME_SYSTEM in
+ mips:Linux | mips64:Linux)
+ # If we got here on MIPS GNU/Linux, output extra information.
+ cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+ ;;
+esac
+
+cat >&2 <<EOF
+
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
+
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+and
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
+# shellcheck disable=SC2003
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
+ cat >&2 <<EOF
+
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
+EOF
+fi
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..ec22b29
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,405 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if the `closedir' function returns void instead of int. */
+#undef CLOSEDIR_VOID
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define to 1 if you have the `atexit' function. */
+#undef HAVE_ATEXIT
+
+/* Define to 1 if you have the Mac OS X function
+ CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the declaration of `STATX_TYPE', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STATX_TYPE
+
+/* Define to 1 if you have the declaration of `SYS_statx', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SYS_STATX
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `getmntent' function. */
+#undef HAVE_GETMNTENT
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <langinfo.h> header file. */
+#undef HAVE_LANGINFO_H
+
+/* Define to 1 if you have the <libintl.h> header file. */
+#undef HAVE_LIBINTL_H
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if `lstat' has the bug that it succeeds when given the
+ zero-length file name argument. */
+#undef HAVE_LSTAT_EMPTY_STRING_BUG
+
+/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
+ to 0 otherwise. */
+#undef HAVE_MALLOC
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the <minix/config.h> header file. */
+#undef HAVE_MINIX_CONFIG_H
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#undef HAVE_MNTENT_H
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the `nl_langinfo' function. */
+#undef HAVE_NL_LANGINFO
+
+/* Define to 1 if your system has a GNU libc compatible `realloc' function,
+ and to 0 otherwise. */
+#undef HAVE_REALLOC
+
+/* Define to 1 if you have the `regcomp' function. */
+#undef HAVE_REGCOMP
+
+/* Define to 1 if you have the `rpmatch' function. */
+#undef HAVE_RPMATCH
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the `socket' function. */
+#undef HAVE_SOCKET
+
+/* Define to 1 if you have the `statx' function. */
+#undef HAVE_STATX
+
+/* Define to 1 if `stat' has the bug that it succeeds when given the
+ zero-length file name argument. */
+#undef HAVE_STAT_EMPTY_STRING_BUG
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strpbrk' function. */
+#undef HAVE_STRPBRK
+
+/* Define to 1 if you have the `strrchr' function. */
+#undef HAVE_STRRCHR
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* Define to 1 if `cp0_status' is a member of `struct pt_regs'. */
+#undef HAVE_STRUCT_PT_REGS_CP0_STATUS
+
+/* Define to 1 if `d0' is a member of `struct pt_regs'. */
+#undef HAVE_STRUCT_PT_REGS_D0
+
+/* Define to 1 if `gpr' is a member of `struct pt_regs'. */
+#undef HAVE_STRUCT_PT_REGS_GPR
+
+/* Define to 1 if `orig_d0' is a member of `struct pt_regs'. */
+#undef HAVE_STRUCT_PT_REGS_ORIG_D0
+
+/* Define to 1 if `orig_gpr3' is a member of `struct pt_regs'. */
+#undef HAVE_STRUCT_PT_REGS_ORIG_GPR3
+
+/* Define to 1 if `regs' is a member of `struct pt_regs'. */
+#undef HAVE_STRUCT_PT_REGS_REGS
+
+/* Define to 1 if `uregs' is a member of `struct pt_regs'. */
+#undef HAVE_STRUCT_PT_REGS_UREGS
+
+/* Define to 1 if `st_rdev' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_RDEV
+
+/* Define to 1 if `regs' is a member of `struct user_pt_regs'. */
+#undef HAVE_STRUCT_USER_PT_REGS_REGS
+
+/* Define to 1 if `eax' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_EAX
+
+/* Define to 1 if `ebx' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_EBX
+
+/* Define to 1 if `ecx' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_ECX
+
+/* Define to 1 if `edx' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_EDX
+
+/* Define to 1 if `orig_eax' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_ORIG_EAX
+
+/* Define to 1 if `orig_rax' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_ORIG_RAX
+
+/* Define to 1 if `rax' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_RAX
+
+/* Define to 1 if `rdi' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_RDI
+
+/* Define to 1 if `rdx' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_RDX
+
+/* Define to 1 if `rsi' is a member of `struct user_regs_struct'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_RSI
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+#undef HAVE_SYS_SYSCALL_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
+ slash. */
+#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+ required in a freestanding environment). This macro is provided for
+ backward compatibility; new code need not use it. */
+#undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+# undef _MINIX
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+# undef _POSIX_SOURCE
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+# undef _POSIX_1_SOURCE
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
+#endif
+
+
+/* Version number of package */
+#undef VERSION
+
+/* Use AppArmor features */
+#undef WITH_APPARMOR
+
+/* Use IPv6 checks */
+#undef WITH_IPV6
+
+/* Use Security-Enhanced Linux features */
+#undef WITH_SELINUX
+
+/* Use statx system call */
+#undef WITH_STATX
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef gid_t
+
+/* Define to rpl_malloc if the replacement function should be used. */
+#undef malloc
+
+/* Define as a signed integer type capable of holding a process identifier. */
+#undef pid_t
+
+/* Define to rpl_realloc if the replacement function should be used. */
+#undef realloc
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef uid_t
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 0000000..24be79c
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,684 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2020 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ nagfor*)
+ wl='-Wl,-Wl,,'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ F* | *Sun*Fortran*)
+ wl=
+ ;;
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ newsos6)
+ ;;
+ *nto* | *qnx*)
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ wl='-Qoption ld '
+ ;;
+ *)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc)
+ ;;
+ m68k)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ haiku*)
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc)
+ ;;
+ m68k)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd2.[01]*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ *nto* | *qnx*)
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc*)
+ library_names_spec='$libname$shrext' ;;
+ m68k)
+ library_names_spec='$libname.a' ;;
+ esac
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd[23].*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ freebsd* | dragonfly*)
+ library_names_spec='$libname$shrext'
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ haiku*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ *nto* | *qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ tpf*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..dba16e8
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1890 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2022 Free Software Foundation, Inc.
+
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-03'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+
+Canonicalize a configuration name.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2022 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo "$1"
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Split fields of configuration type
+# shellcheck disable=SC2162
+saved_IFS=$IFS
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
+IFS=$saved_IFS
+
+# Separate into logical components for further validation
+case $1 in
+ *-*-*-*-*)
+ echo Invalid configuration \`"$1"\': more than four components >&2
+ exit 1
+ ;;
+ *-*-*-*)
+ basic_machine=$field1-$field2
+ basic_os=$field3-$field4
+ ;;
+ *-*-*)
+ # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+ # parts
+ maybe_os=$field2-$field3
+ case $maybe_os in
+ nto-qnx* | linux-* | uclinux-uclibc* \
+ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+ | storm-chaos* | os2-emx* | rtmk-nova*)
+ basic_machine=$field1
+ basic_os=$maybe_os
+ ;;
+ android-linux)
+ basic_machine=$field1-unknown
+ basic_os=linux-android
+ ;;
+ *)
+ basic_machine=$field1-$field2
+ basic_os=$field3
+ ;;
+ esac
+ ;;
+ *-*)
+ # A lone config we happen to match not fitting any pattern
+ case $field1-$field2 in
+ decstation-3100)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ *-*)
+ # Second component is usually, but not always the OS
+ case $field2 in
+ # Prevent following clause from handling this valid os
+ sun*os*)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
+ # Manufacturers
+ dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+ | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+ | convergent* | ncr* | news | 32* | 3600* | 3100* \
+ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+ | ultra | tti* | harris | dolphin | highlevel | gould \
+ | cbm | ns | masscomp | apple | axis | knuth | cray \
+ | microblaze* | sim | cisco \
+ | oki | wec | wrs | winbond)
+ basic_machine=$field1-$field2
+ basic_os=
+ ;;
+ *)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ *)
+ # Convert single-component short-hands not valid as part of
+ # multi-component configurations.
+ case $field1 in
+ 386bsd)
+ basic_machine=i386-pc
+ basic_os=bsd
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ basic_os=scout
+ ;;
+ alliant)
+ basic_machine=fx80-alliant
+ basic_os=
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ basic_os=
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ basic_os=bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ basic_os=sysv
+ ;;
+ amiga)
+ basic_machine=m68k-unknown
+ basic_os=
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ basic_os=amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ basic_os=sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ basic_os=sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ basic_os=bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ basic_os=aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ basic_os=aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ basic_os=dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ basic_os=linux
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ basic_os=cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ basic_os=bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ basic_os=bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ basic_os=bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ basic_os=bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ basic_os=bsd
+ ;;
+ cray)
+ basic_machine=j90-cray
+ basic_os=unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ basic_os=
+ ;;
+ da30)
+ basic_machine=m68k-da30
+ basic_os=
+ ;;
+ decstation | pmax | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ basic_os=sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ basic_os=dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ basic_os=msdosdjgpp
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ basic_os=ebmon
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ basic_os=ose
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ basic_os=sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ basic_os=go32
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ basic_os=hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ basic_os=xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ basic_os=hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ basic_os=sysv3
+ ;;
+ hp300 | hp300hpux)
+ basic_machine=m68k-hp
+ basic_os=hpux
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ basic_os=bsd
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ basic_os=osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ basic_os=proelf
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ basic_os=mach
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ basic_os=sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ basic_os=linux
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ basic_os=sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ basic_os=sysv
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ basic_os=mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ basic_os=mingw32ce
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ basic_os=morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ basic_os=moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ basic_os=msdos
+ ;;
+ msys)
+ basic_machine=i686-pc
+ basic_os=msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ basic_os=mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ basic_os=nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ basic_os=sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-pc
+ basic_os=netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ basic_os=linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ basic_os=newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ basic_os=newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ basic_os=sysv
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ basic_os=cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ basic_os=cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ basic_os=nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ basic_os=mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ basic_os=nonstopux
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ basic_os=os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ basic_os=ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ basic_os=os68k
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ basic_os=osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ basic_os=linux
+ ;;
+ psp)
+ basic_machine=mipsallegrexel-sony
+ basic_os=psp
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ basic_os=pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ basic_os=rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ basic_os=rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ sei)
+ basic_machine=mips-sei
+ basic_os=seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ basic_os=
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ basic_os=sysv2
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ basic_os=
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ basic_os=sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ basic_os=
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ basic_os=sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ basic_os=sunos4
+ ;;
+ sun3)
+ basic_machine=m68k-sun
+ basic_os=
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ basic_os=sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ basic_os=sunos4
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ basic_os=
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ basic_os=sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ basic_os=sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ basic_os=solaris2
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ basic_os=
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ basic_os=unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ basic_os=dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ basic_os=unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ basic_os=unicos
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ basic_os=tops20
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ basic_os=tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ basic_os=sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ basic_os=none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ basic_os=sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ basic_os=vms
+ ;;
+ vsta)
+ basic_machine=i386-pc
+ basic_os=vsta
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ basic_os=vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ basic_os=vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ basic_os=vxworks
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ basic_os=unicos
+ ;;
+ *)
+ basic_machine=$1
+ basic_os=
+ ;;
+ esac
+ ;;
+esac
+
+# Decode 1-component or ad-hoc basic machines
+case $basic_machine in
+ # Here we handle the default manufacturer of certain CPU types. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ cpu=hppa1.1
+ vendor=winbond
+ ;;
+ op50n)
+ cpu=hppa1.1
+ vendor=oki
+ ;;
+ op60c)
+ cpu=hppa1.1
+ vendor=oki
+ ;;
+ ibm*)
+ cpu=i370
+ vendor=ibm
+ ;;
+ orion105)
+ cpu=clipper
+ vendor=highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ cpu=m68k
+ vendor=apple
+ ;;
+ pmac | pmac-mpw)
+ cpu=powerpc
+ vendor=apple
+ ;;
+
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ cpu=m68000
+ vendor=att
+ ;;
+ 3b*)
+ cpu=we32k
+ vendor=att
+ ;;
+ bluegene*)
+ cpu=powerpc
+ vendor=ibm
+ basic_os=cnk
+ ;;
+ decsystem10* | dec10*)
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops10
+ ;;
+ decsystem20* | dec20*)
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ cpu=m68k
+ vendor=motorola
+ ;;
+ dpx2*)
+ cpu=m68k
+ vendor=bull
+ basic_os=sysv3
+ ;;
+ encore | umax | mmax)
+ cpu=ns32k
+ vendor=encore
+ ;;
+ elxsi)
+ cpu=elxsi
+ vendor=elxsi
+ basic_os=${basic_os:-bsd}
+ ;;
+ fx2800)
+ cpu=i860
+ vendor=alliant
+ ;;
+ genix)
+ cpu=ns32k
+ vendor=ns
+ ;;
+ h3050r* | hiux*)
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ cpu=m68000
+ vendor=hp
+ ;;
+ hp9k3[2-9][0-9])
+ cpu=m68k
+ vendor=hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ i*86v32)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv32
+ ;;
+ i*86v4*)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv4
+ ;;
+ i*86v)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv
+ ;;
+ i*86sol2)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=solaris2
+ ;;
+ j90 | j90-cray)
+ cpu=j90
+ vendor=cray
+ basic_os=${basic_os:-unicos}
+ ;;
+ iris | iris4d)
+ cpu=mips
+ vendor=sgi
+ case $basic_os in
+ irix*)
+ ;;
+ *)
+ basic_os=irix4
+ ;;
+ esac
+ ;;
+ miniframe)
+ cpu=m68000
+ vendor=convergent
+ ;;
+ *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ cpu=m68k
+ vendor=atari
+ basic_os=mint
+ ;;
+ news-3600 | risc-news)
+ cpu=mips
+ vendor=sony
+ basic_os=newsos
+ ;;
+ next | m*-next)
+ cpu=m68k
+ vendor=next
+ case $basic_os in
+ openstep*)
+ ;;
+ nextstep*)
+ ;;
+ ns2*)
+ basic_os=nextstep2
+ ;;
+ *)
+ basic_os=nextstep3
+ ;;
+ esac
+ ;;
+ np1)
+ cpu=np1
+ vendor=gould
+ ;;
+ op50n-* | op60c-*)
+ cpu=hppa1.1
+ vendor=oki
+ basic_os=proelf
+ ;;
+ pa-hitachi)
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
+ ;;
+ pbd)
+ cpu=sparc
+ vendor=tti
+ ;;
+ pbb)
+ cpu=m68k
+ vendor=tti
+ ;;
+ pc532)
+ cpu=ns32k
+ vendor=pc532
+ ;;
+ pn)
+ cpu=pn
+ vendor=gould
+ ;;
+ power)
+ cpu=power
+ vendor=ibm
+ ;;
+ ps2)
+ cpu=i386
+ vendor=ibm
+ ;;
+ rm[46]00)
+ cpu=mips
+ vendor=siemens
+ ;;
+ rtpc | rtpc-*)
+ cpu=romp
+ vendor=ibm
+ ;;
+ sde)
+ cpu=mipsisa32
+ vendor=sde
+ basic_os=${basic_os:-elf}
+ ;;
+ simso-wrs)
+ cpu=sparclite
+ vendor=wrs
+ basic_os=vxworks
+ ;;
+ tower | tower-32)
+ cpu=m68k
+ vendor=ncr
+ ;;
+ vpp*|vx|vx-*)
+ cpu=f301
+ vendor=fujitsu
+ ;;
+ w65)
+ cpu=w65
+ vendor=wdc
+ ;;
+ w89k-*)
+ cpu=hppa1.1
+ vendor=winbond
+ basic_os=proelf
+ ;;
+ none)
+ cpu=none
+ vendor=none
+ ;;
+ leon|leon[3-9])
+ cpu=sparc
+ vendor=$basic_machine
+ ;;
+ leon-*|leon[3-9]-*)
+ cpu=sparc
+ vendor=`echo "$basic_machine" | sed 's/-.*//'`
+ ;;
+
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
+ IFS=$saved_IFS
+ ;;
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ cpu=$basic_machine
+ vendor=pc
+ ;;
+ # These rules are duplicated from below for sake of the special case above;
+ # i.e. things that normalized to x86 arches should also default to "pc"
+ pc98)
+ cpu=i386
+ vendor=pc
+ ;;
+ x64 | amd64)
+ cpu=x86_64
+ vendor=pc
+ ;;
+ # Recognize the basic CPU types without company name.
+ *)
+ cpu=$basic_machine
+ vendor=unknown
+ ;;
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+ # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ craynv-unknown)
+ vendor=cray
+ basic_os=${basic_os:-unicosmp}
+ ;;
+ c90-unknown | c90-cray)
+ vendor=cray
+ basic_os=${Basic_os:-unicos}
+ ;;
+ fx80-unknown)
+ vendor=alliant
+ ;;
+ romp-unknown)
+ vendor=ibm
+ ;;
+ mmix-unknown)
+ vendor=knuth
+ ;;
+ microblaze-unknown | microblazeel-unknown)
+ vendor=xilinx
+ ;;
+ rs6000-unknown)
+ vendor=ibm
+ ;;
+ vax-unknown)
+ vendor=dec
+ ;;
+ pdp11-unknown)
+ vendor=dec
+ ;;
+ we32k-unknown)
+ vendor=att
+ ;;
+ cydra-unknown)
+ vendor=cydrome
+ ;;
+ i370-ibm*)
+ vendor=ibm
+ ;;
+ orion-unknown)
+ vendor=highlevel
+ ;;
+ xps-unknown | xps100-unknown)
+ cpu=xps100
+ vendor=honeywell
+ ;;
+
+ # Here we normalize CPU types with a missing or matching vendor
+ armh-unknown | armh-alt)
+ cpu=armv7l
+ vendor=alt
+ basic_os=${basic_os:-linux-gnueabihf}
+ ;;
+ dpx20-unknown | dpx20-bull)
+ cpu=rs6000
+ vendor=bull
+ basic_os=${basic_os:-bosx}
+ ;;
+
+ # Here we normalize CPU types irrespective of the vendor
+ amd64-*)
+ cpu=x86_64
+ ;;
+ blackfin-*)
+ cpu=bfin
+ basic_os=linux
+ ;;
+ c54x-*)
+ cpu=tic54x
+ ;;
+ c55x-*)
+ cpu=tic55x
+ ;;
+ c6x-*)
+ cpu=tic6x
+ ;;
+ e500v[12]-*)
+ cpu=powerpc
+ basic_os=${basic_os}"spe"
+ ;;
+ mips3*-*)
+ cpu=mips64
+ ;;
+ ms1-*)
+ cpu=mt
+ ;;
+ m68knommu-*)
+ cpu=m68k
+ basic_os=linux
+ ;;
+ m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+ cpu=s12z
+ ;;
+ openrisc-*)
+ cpu=or32
+ ;;
+ parisc-*)
+ cpu=hppa
+ basic_os=linux
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ cpu=i586
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+ cpu=i686
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ cpu=i686
+ ;;
+ pentium4-*)
+ cpu=i786
+ ;;
+ pc98-*)
+ cpu=i386
+ ;;
+ ppc-* | ppcbe-*)
+ cpu=powerpc
+ ;;
+ ppcle-* | powerpclittle-*)
+ cpu=powerpcle
+ ;;
+ ppc64-*)
+ cpu=powerpc64
+ ;;
+ ppc64le-* | powerpc64little-*)
+ cpu=powerpc64le
+ ;;
+ sb1-*)
+ cpu=mipsisa64sb1
+ ;;
+ sb1el-*)
+ cpu=mipsisa64sb1el
+ ;;
+ sh5e[lb]-*)
+ cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
+ ;;
+ spur-*)
+ cpu=spur
+ ;;
+ strongarm-* | thumb-*)
+ cpu=arm
+ ;;
+ tx39-*)
+ cpu=mipstx39
+ ;;
+ tx39el-*)
+ cpu=mipstx39el
+ ;;
+ x64-*)
+ cpu=x86_64
+ ;;
+ xscale-* | xscalee[bl]-*)
+ cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
+ ;;
+ arm64-* | aarch64le-*)
+ cpu=aarch64
+ ;;
+
+ # Recognize the canonical CPU Types that limit and/or modify the
+ # company names they are paired with.
+ cr16-*)
+ basic_os=${basic_os:-elf}
+ ;;
+ crisv32-* | etraxfs*-*)
+ cpu=crisv32
+ vendor=axis
+ ;;
+ cris-* | etrax*-*)
+ cpu=cris
+ vendor=axis
+ ;;
+ crx-*)
+ basic_os=${basic_os:-elf}
+ ;;
+ neo-tandem)
+ cpu=neo
+ vendor=tandem
+ ;;
+ nse-tandem)
+ cpu=nse
+ vendor=tandem
+ ;;
+ nsr-tandem)
+ cpu=nsr
+ vendor=tandem
+ ;;
+ nsv-tandem)
+ cpu=nsv
+ vendor=tandem
+ ;;
+ nsx-tandem)
+ cpu=nsx
+ vendor=tandem
+ ;;
+ mipsallegrexel-sony)
+ cpu=mipsallegrexel
+ vendor=sony
+ ;;
+ tile*-*)
+ basic_os=${basic_os:-linux-gnu}
+ ;;
+
+ *)
+ # Recognize the canonical CPU types that are allowed with any
+ # company name.
+ case $cpu in
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | abacus \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+ | alphapca5[67] | alpha64pca5[67] \
+ | am33_2.0 \
+ | amdgcn \
+ | arc | arceb | arc32 | arc64 \
+ | arm | arm[lb]e | arme[lb] | armv* \
+ | avr | avr32 \
+ | asmjs \
+ | ba \
+ | be32 | be64 \
+ | bfin | bpf | bs2000 \
+ | c[123]* | c30 | [cjt]90 | c4x \
+ | c8051 | clipper | craynv | csky | cydra \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | elxsi | epiphany \
+ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+ | h8300 | h8500 \
+ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | loongarch32 | loongarch64 | loongarchx32 \
+ | m32c | m32r | m32rle \
+ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
+ | m88110 | m88k | maxq | mb | mcore | mep | metag \
+ | microblaze | microblazeel \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64eb | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r3 | mipsisa32r3el \
+ | mipsisa32r5 | mipsisa32r5el \
+ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r3 | mipsisa64r3el \
+ | mipsisa64r5 | mipsisa64r5el \
+ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mmix \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nfp \
+ | nios | nios2 | nios2eb | nios2el \
+ | none | np1 | ns16k | ns32k | nvptx \
+ | open8 \
+ | or1k* \
+ | or32 \
+ | orion \
+ | picochip \
+ | pdp10 | pdp11 | pj | pjl | pn | power \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+ | pru \
+ | pyramid \
+ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
+ | rl78 | romp | rs6000 | rx \
+ | s390 | s390x \
+ | score \
+ | sh | shl \
+ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+ | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+ | spu \
+ | tahoe \
+ | thumbv7* \
+ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+ | tron \
+ | ubicom32 \
+ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+ | vax \
+ | visium \
+ | w65 \
+ | wasm32 | wasm64 \
+ | we32k \
+ | x86 | x86_64 | xc16x | xgate | xps100 \
+ | xstormy16 | xtensa* \
+ | ymp \
+ | z8k | z80)
+ ;;
+
+ *)
+ echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+ exit 1
+ ;;
+ esac
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $vendor in
+ digital*)
+ vendor=dec
+ ;;
+ commodore*)
+ vendor=cbm
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if test x$basic_os != x
+then
+
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
+# set os.
+case $basic_os in
+ gnu/linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
+ ;;
+ os2-emx)
+ kernel=os2
+ os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
+ ;;
+ nto-qnx*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
+ ;;
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+ IFS=$saved_IFS
+ ;;
+ # Default OS when just kernel was specified
+ nto*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
+ ;;
+ linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+ ;;
+ *)
+ kernel=
+ os=$basic_os
+ ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
+case $os in
+ # First match some system type aliases that might get confused
+ # with valid system types.
+ # solaris* is a basic system type, with this one exception.
+ auroraux)
+ os=auroraux
+ ;;
+ bluegene*)
+ os=cnk
+ ;;
+ solaris1 | solaris1.*)
+ os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
+ ;;
+ solaris)
+ os=solaris2
+ ;;
+ unixware*)
+ os=sysv4.2uw
+ ;;
+ # es1800 is here to avoid being matched by es* (a different OS)
+ es1800*)
+ os=ose
+ ;;
+ # Some version numbers need modification
+ chorusos*)
+ os=chorusos
+ ;;
+ isc)
+ os=isc2.2
+ ;;
+ sco6)
+ os=sco5v6
+ ;;
+ sco5)
+ os=sco3.2v5
+ ;;
+ sco4)
+ os=sco3.2v4
+ ;;
+ sco3.2.[4-9]*)
+ os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
+ ;;
+ sco*v* | scout)
+ # Don't match below
+ ;;
+ sco*)
+ os=sco3.2v2
+ ;;
+ psos*)
+ os=psos
+ ;;
+ qnx*)
+ os=qnx
+ ;;
+ hiux*)
+ os=hiuxwe2
+ ;;
+ lynx*178)
+ os=lynxos178
+ ;;
+ lynx*5)
+ os=lynxos5
+ ;;
+ lynxos*)
+ # don't get caught up in next wildcard
+ ;;
+ lynx*)
+ os=lynxos
+ ;;
+ mac[0-9]*)
+ os=`echo "$os" | sed -e 's|mac|macos|'`
+ ;;
+ opened*)
+ os=openedition
+ ;;
+ os400*)
+ os=os400
+ ;;
+ sunos5*)
+ os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+ ;;
+ sunos6*)
+ os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+ ;;
+ wince*)
+ os=wince
+ ;;
+ utek*)
+ os=bsd
+ ;;
+ dynix*)
+ os=bsd
+ ;;
+ acis*)
+ os=aos
+ ;;
+ atheos*)
+ os=atheos
+ ;;
+ syllable*)
+ os=syllable
+ ;;
+ 386bsd)
+ os=bsd
+ ;;
+ ctix* | uts*)
+ os=sysv
+ ;;
+ nova*)
+ os=rtmk-nova
+ ;;
+ ns2)
+ os=nextstep2
+ ;;
+ # Preserve the version number of sinix5.
+ sinix5.*)
+ os=`echo "$os" | sed -e 's|sinix|sysv|'`
+ ;;
+ sinix*)
+ os=sysv4
+ ;;
+ tpf*)
+ os=tpf
+ ;;
+ triton*)
+ os=sysv3
+ ;;
+ oss*)
+ os=sysv3
+ ;;
+ svr4*)
+ os=sysv4
+ ;;
+ svr3)
+ os=sysv3
+ ;;
+ sysvr4)
+ os=sysv4
+ ;;
+ ose*)
+ os=ose
+ ;;
+ *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ os=mint
+ ;;
+ dicos*)
+ os=dicos
+ ;;
+ pikeos*)
+ # Until real need of OS specific support for
+ # particular features comes up, bare metal
+ # configurations are quite functional.
+ case $cpu in
+ arm*)
+ os=eabi
+ ;;
+ *)
+ os=elf
+ ;;
+ esac
+ ;;
+ *)
+ # No normalization, but not necessarily accepted, that comes below.
+ ;;
+esac
+
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+kernel=
+case $cpu-$vendor in
+ score-*)
+ os=elf
+ ;;
+ spu-*)
+ os=elf
+ ;;
+ *-acorn)
+ os=riscix1.2
+ ;;
+ arm*-rebel)
+ kernel=linux
+ os=gnu
+ ;;
+ arm*-semi)
+ os=aout
+ ;;
+ c4x-* | tic4x-*)
+ os=coff
+ ;;
+ c8051-*)
+ os=elf
+ ;;
+ clipper-intergraph)
+ os=clix
+ ;;
+ hexagon-*)
+ os=elf
+ ;;
+ tic54x-*)
+ os=coff
+ ;;
+ tic55x-*)
+ os=coff
+ ;;
+ tic6x-*)
+ os=coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=tops20
+ ;;
+ pdp11-*)
+ os=none
+ ;;
+ *-dec | vax-*)
+ os=ultrix4.2
+ ;;
+ m68*-apollo)
+ os=domain
+ ;;
+ i386-sun)
+ os=sunos4.0.2
+ ;;
+ m68000-sun)
+ os=sunos3
+ ;;
+ m68*-cisco)
+ os=aout
+ ;;
+ mep-*)
+ os=elf
+ ;;
+ mips*-cisco)
+ os=elf
+ ;;
+ mips*-*)
+ os=elf
+ ;;
+ or32-*)
+ os=coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=sysv3
+ ;;
+ sparc-* | *-sun)
+ os=sunos4.1.1
+ ;;
+ pru-*)
+ os=elf
+ ;;
+ *-be)
+ os=beos
+ ;;
+ *-ibm)
+ os=aix
+ ;;
+ *-knuth)
+ os=mmixware
+ ;;
+ *-wec)
+ os=proelf
+ ;;
+ *-winbond)
+ os=proelf
+ ;;
+ *-oki)
+ os=proelf
+ ;;
+ *-hp)
+ os=hpux
+ ;;
+ *-hitachi)
+ os=hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=sysv
+ ;;
+ *-cbm)
+ os=amigaos
+ ;;
+ *-dg)
+ os=dgux
+ ;;
+ *-dolphin)
+ os=sysv3
+ ;;
+ m68k-ccur)
+ os=rtu
+ ;;
+ m88k-omron*)
+ os=luna
+ ;;
+ *-next)
+ os=nextstep
+ ;;
+ *-sequent)
+ os=ptx
+ ;;
+ *-crds)
+ os=unos
+ ;;
+ *-ns)
+ os=genix
+ ;;
+ i370-*)
+ os=mvs
+ ;;
+ *-gould)
+ os=sysv
+ ;;
+ *-highlevel)
+ os=bsd
+ ;;
+ *-encore)
+ os=bsd
+ ;;
+ *-sgi)
+ os=irix
+ ;;
+ *-siemens)
+ os=sysv4
+ ;;
+ *-masscomp)
+ os=rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=uxpv
+ ;;
+ *-rom68k)
+ os=coff
+ ;;
+ *-*bug)
+ os=coff
+ ;;
+ *-apple)
+ os=macos
+ ;;
+ *-atari*)
+ os=mint
+ ;;
+ *-wrs)
+ os=vxworks
+ ;;
+ *)
+ os=none
+ ;;
+esac
+
+fi
+
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+ # Sometimes we do "kernel-libc", so those need to count as OSes.
+ musl* | newlib* | relibc* | uclibc*)
+ ;;
+ # Likewise for "kernel-abi"
+ eabi* | gnueabi*)
+ ;;
+ # VxWorks passes extra cpu info in the 4th filed.
+ simlinux | simwindows | spe)
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+ | hiux* | abug | nacl* | netware* | windows* \
+ | os9* | macos* | osx* | ios* \
+ | mpw* | magic* | mmixware* | mon960* | lnews* \
+ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+ | aos* | aros* | cloudabi* | sortix* | twizzler* \
+ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+ | mirbsd* | netbsd* | dicos* | openedition* | ose* \
+ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
+ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
+ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+ | udi* | lites* | ieee* | go32* | aux* | hcos* \
+ | chorusrdb* | cegcc* | glidix* | serenity* \
+ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+ | midipix* | mingw32* | mingw64* | mint* \
+ | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+ | interix* | uwin* | mks* | rhapsody* | darwin* \
+ | openstep* | oskit* | conix* | pw32* | nonstopux* \
+ | storm-chaos* | tops10* | tenex* | tops20* | its* \
+ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+ | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+ | fiwix* )
+ ;;
+ # This one is extra strict with allowed versions
+ sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ ;;
+ none)
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# As a final step for OS-related things, validate the OS-kernel combination
+# (given a valid OS), if there is a kernel.
+case $kernel-$os in
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
+ | linux-musl* | linux-relibc* | linux-uclibc* )
+ ;;
+ uclinux-uclibc* )
+ ;;
+ -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
+ # These are just libc implementations, not actual OSes, and thus
+ # require a kernel.
+ echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
+ exit 1
+ ;;
+ kfreebsd*-gnu* | kopensolaris*-gnu*)
+ ;;
+ vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+ ;;
+ nto-qnx*)
+ ;;
+ os2-emx)
+ ;;
+ *-eabi* | *-gnueabi*)
+ ;;
+ -*)
+ # Blank kernel with real OS is always fine.
+ ;;
+ *-*)
+ echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+case $vendor in
+ unknown)
+ case $cpu-$os in
+ *-riscix*)
+ vendor=acorn
+ ;;
+ *-sunos*)
+ vendor=sun
+ ;;
+ *-cnk* | *-aix*)
+ vendor=ibm
+ ;;
+ *-beos*)
+ vendor=be
+ ;;
+ *-hpux*)
+ vendor=hp
+ ;;
+ *-mpeix*)
+ vendor=hp
+ ;;
+ *-hiux*)
+ vendor=hitachi
+ ;;
+ *-unos*)
+ vendor=crds
+ ;;
+ *-dgux*)
+ vendor=dg
+ ;;
+ *-luna*)
+ vendor=omron
+ ;;
+ *-genix*)
+ vendor=ns
+ ;;
+ *-clix*)
+ vendor=intergraph
+ ;;
+ *-mvs* | *-opened*)
+ vendor=ibm
+ ;;
+ *-os400*)
+ vendor=ibm
+ ;;
+ s390-* | s390x-*)
+ vendor=ibm
+ ;;
+ *-ptx*)
+ vendor=sequent
+ ;;
+ *-tpf*)
+ vendor=ibm
+ ;;
+ *-vxsim* | *-vxworks* | *-windiss*)
+ vendor=wrs
+ ;;
+ *-aux*)
+ vendor=apple
+ ;;
+ *-hms*)
+ vendor=hitachi
+ ;;
+ *-mpw* | *-macos*)
+ vendor=apple
+ ;;
+ *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
+ vendor=atari
+ ;;
+ *-vos*)
+ vendor=stratus
+ ;;
+ esac
+ ;;
+esac
+
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
+exit
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..93e4ec3
--- /dev/null
+++ b/configure
@@ -0,0 +1,13476 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.71 for psmisc 23.7.
+#
+#
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else $as_nop
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
+as_nl='
+'
+export as_nl
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+
+# The user is always right.
+if ${PATH_SEPARATOR+false} :; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else \$as_nop
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
+
+else \$as_nop
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null
+then :
+ as_have_required=yes
+else $as_nop
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
+
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
+
+
+ if test "x$CONFIG_SHELL" != x
+then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else $as_nop
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else $as_nop
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ printf "%s\n" "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='psmisc'
+PACKAGE_TARNAME='psmisc'
+PACKAGE_VERSION='23.7'
+PACKAGE_STRING='psmisc 23.7'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_unique_file="src/comm.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_header_c_list=
+gt_needs=
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+DEJAGNU
+LIBOBJS
+WANT_PEEKFD_M68K_FALSE
+WANT_PEEKFD_M68K_TRUE
+WANT_PEEKFD_MIPS_FALSE
+WANT_PEEKFD_MIPS_TRUE
+WANT_PEEKFD_ARM64_FALSE
+WANT_PEEKFD_ARM64_TRUE
+WANT_PEEKFD_ARM_FALSE
+WANT_PEEKFD_ARM_TRUE
+WANT_PEEKFD_PPC_FALSE
+WANT_PEEKFD_PPC_TRUE
+WANT_PEEKFD_X86_64_FALSE
+WANT_PEEKFD_X86_64_TRUE
+WANT_PEEKFD_I386_FALSE
+WANT_PEEKFD_I386_TRUE
+WANT_FUSER_FALSE
+WANT_FUSER_TRUE
+POSUB
+LTLIBINTL
+LIBINTL
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE_FOR_MSGFMT_OPTION
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+SED
+HARDEN_LDFLAGS
+HARDEN_CFLAGS
+EGREP
+GREP
+CPP
+TERMCAP_LIB
+WITH_IPV6
+WITH_STATX
+WITH_AppArmor
+DL_LIB
+WITH_SELINUX
+USE_PO4A
+PO4A
+USE_NLS
+LN_S
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+CSCOPE
+ETAGS
+CTAGS
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+runstatedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL
+am__quote'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_dependency_tracking
+enable_nls
+enable_selinux
+enable_apparmor
+enable_statx
+enable_harden_flags
+enable_ipv6
+with_gnu_ld
+enable_rpath
+with_libiconv_prefix
+with_libintl_prefix
+enable_largefile
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CXX
+CXXFLAGS
+CCC
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir runstatedir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures psmisc 23.7 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/psmisc]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of psmisc 23.7:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --disable-nls do not use Native Language Support
+ --enable-selinux Enable Security-Enhanced Linux features
+ --enable-apparmor Enable AppArmor features
+ --disable-statx Do not use linux specific statx(2) system call as
+ replacement for stat(2), lstat(2), and fstat(2)
+ --disable-harden-flags disable hardened compilier and linker flags
+ --disable-ipv6 Disable IPv6 checks (for uClibc)
+ --disable-rpath do not hardcode runtime library paths
+ --disable-largefile omit support for large files
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
+ --without-libiconv-prefix don't search for libiconv in includedir and libdir
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+psmisc configure 23.7
+generated by GNU Autoconf 2.71
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
+# ------------------------------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR.
+ac_fn_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+printf %s "checking whether $as_decl_name is declared... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ eval ac_save_FLAGS=\$$6
+ as_fn_append $6 " $5"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ eval $6=\$ac_save_FLAGS
+
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_check_decl
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below. */
+
+#include <limits.h>
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main (void)
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+printf %s "checking for $2.$3... " >&6; }
+if eval test \${$4+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$5
+int
+main (void)
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$4=yes"
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$5
+int
+main (void)
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$4=yes"
+else $as_nop
+ eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$4
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by psmisc $as_me 23.7, which was
+generated by GNU Autoconf 2.71. Invocation command line was
+
+ $ $0$ac_configure_args_raw
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ printf "%s\n" "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ printf "%s\n" "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ printf "%s\n" "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ printf "%s\n" "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+printf "%s\n" "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+ ac_site_files="$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
+else
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+fi
+
+for ac_site_file in $ac_site_files
+do
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H"
+as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H"
+# Test code for whether the C++ compiler supports C++98 (global declarations)
+ac_cxx_conftest_cxx98_globals='
+// Does the compiler advertise C++98 conformance?
+#if !defined __cplusplus || __cplusplus < 199711L
+# error "Compiler does not advertise C++98 conformance"
+#endif
+
+// These inclusions are to reject old compilers that
+// lack the unsuffixed header files.
+#include <cstdlib>
+#include <exception>
+
+// <cassert> and <cstring> are *not* freestanding headers in C++98.
+extern void assert (int);
+namespace std {
+ extern int strcmp (const char *, const char *);
+}
+
+// Namespaces, exceptions, and templates were all added after "C++ 2.0".
+using std::exception;
+using std::strcmp;
+
+namespace {
+
+void test_exception_syntax()
+{
+ try {
+ throw "test";
+ } catch (const char *s) {
+ // Extra parentheses suppress a warning when building autoconf itself,
+ // due to lint rules shared with more typical C programs.
+ assert (!(strcmp) (s, "test"));
+ }
+}
+
+template <typename T> struct test_template
+{
+ T const val;
+ explicit test_template(T t) : val(t) {}
+ template <typename U> T add(U u) { return static_cast<T>(u) + val; }
+};
+
+} // anonymous namespace
+'
+
+# Test code for whether the C++ compiler supports C++98 (body of main)
+ac_cxx_conftest_cxx98_main='
+ assert (argc);
+ assert (! argv[0]);
+{
+ test_exception_syntax ();
+ test_template<double> tt (2.0);
+ assert (tt.add (4) == 6.0);
+ assert (true && !false);
+}
+'
+
+# Test code for whether the C++ compiler supports C++11 (global declarations)
+ac_cxx_conftest_cxx11_globals='
+// Does the compiler advertise C++ 2011 conformance?
+#if !defined __cplusplus || __cplusplus < 201103L
+# error "Compiler does not advertise C++11 conformance"
+#endif
+
+namespace cxx11test
+{
+ constexpr int get_val() { return 20; }
+
+ struct testinit
+ {
+ int i;
+ double d;
+ };
+
+ class delegate
+ {
+ public:
+ delegate(int n) : n(n) {}
+ delegate(): delegate(2354) {}
+
+ virtual int getval() { return this->n; };
+ protected:
+ int n;
+ };
+
+ class overridden : public delegate
+ {
+ public:
+ overridden(int n): delegate(n) {}
+ virtual int getval() override final { return this->n * 2; }
+ };
+
+ class nocopy
+ {
+ public:
+ nocopy(int i): i(i) {}
+ nocopy() = default;
+ nocopy(const nocopy&) = delete;
+ nocopy & operator=(const nocopy&) = delete;
+ private:
+ int i;
+ };
+
+ // for testing lambda expressions
+ template <typename Ret, typename Fn> Ret eval(Fn f, Ret v)
+ {
+ return f(v);
+ }
+
+ // for testing variadic templates and trailing return types
+ template <typename V> auto sum(V first) -> V
+ {
+ return first;
+ }
+ template <typename V, typename... Args> auto sum(V first, Args... rest) -> V
+ {
+ return first + sum(rest...);
+ }
+}
+'
+
+# Test code for whether the C++ compiler supports C++11 (body of main)
+ac_cxx_conftest_cxx11_main='
+{
+ // Test auto and decltype
+ auto a1 = 6538;
+ auto a2 = 48573953.4;
+ auto a3 = "String literal";
+
+ int total = 0;
+ for (auto i = a3; *i; ++i) { total += *i; }
+
+ decltype(a2) a4 = 34895.034;
+}
+{
+ // Test constexpr
+ short sa[cxx11test::get_val()] = { 0 };
+}
+{
+ // Test initializer lists
+ cxx11test::testinit il = { 4323, 435234.23544 };
+}
+{
+ // Test range-based for
+ int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3,
+ 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+ for (auto &x : array) { x += 23; }
+}
+{
+ // Test lambda expressions
+ using cxx11test::eval;
+ assert (eval ([](int x) { return x*2; }, 21) == 42);
+ double d = 2.0;
+ assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0);
+ assert (d == 5.0);
+ assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0);
+ assert (d == 5.0);
+}
+{
+ // Test use of variadic templates
+ using cxx11test::sum;
+ auto a = sum(1);
+ auto b = sum(1, 2);
+ auto c = sum(1.0, 2.0, 3.0);
+}
+{
+ // Test constructor delegation
+ cxx11test::delegate d1;
+ cxx11test::delegate d2();
+ cxx11test::delegate d3(45);
+}
+{
+ // Test override and final
+ cxx11test::overridden o1(55464);
+}
+{
+ // Test nullptr
+ char *c = nullptr;
+}
+{
+ // Test template brackets
+ test_template<::test_template<int>> v(test_template<int>(12));
+}
+{
+ // Unicode literals
+ char const *utf8 = u8"UTF-8 string \u2500";
+ char16_t const *utf16 = u"UTF-8 string \u2500";
+ char32_t const *utf32 = U"UTF-32 string \u2500";
+}
+'
+
+# Test code for whether the C compiler supports C++11 (complete).
+ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals}
+${ac_cxx_conftest_cxx11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_cxx_conftest_cxx98_main}
+ ${ac_cxx_conftest_cxx11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C++98 (complete).
+ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals}
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_cxx_conftest_cxx98_main}
+ return ok;
+}
+"
+
+gt_needs="$gt_needs "
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.guess config.sub config.rpath compile missing install-sh"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.."
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am__api_version='1.16'
+
+
+
+ # Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test ${ac_cv_path_install+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+ ./ | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test ${ac_cv_path_install+y}; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+printf %s "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"`
+
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+
+ if test x"${MISSING+set}" != xset; then
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5
+printf %s "checking for a race-free mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test ${ac_cv_path_mkdir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir ('*'coreutils) '* | \
+ 'BusyBox '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test ${ac_cv_path_mkdir+y}; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+printf "%s\n" "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AWK+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+printf "%s\n" "$AWK" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ SET_MAKE=
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test ${enable_silent_rules+y}
+then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if printf "%s\n" 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='psmisc'
+ VERSION='23.7'
+
+
+printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
+
+
+printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a pax tar archive" >&5
+printf %s "checking how to create a pax tar archive... " >&6; }
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_pax-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ { echo "$as_me:$LINENO: $_am_tar --version" >&5
+ ($_am_tar --version) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && break
+ done
+ am__tar="$_am_tar --format=posix -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=posix -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x pax -w "$$tardir"'
+ am__tar_='pax -L -x pax -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H pax -L'
+ am__tar_='find "$tardir" -print | cpio -o -H pax -L'
+ am__untar='cpio -i -H pax -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_pax}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
+ (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
+ ($am__untar <conftest.tar) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ { echo "$as_me:$LINENO: cat conftest.dir/file" >&5
+ (cat conftest.dir/file) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ if test ${am_cv_prog_tar_pax+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ am_cv_prog_tar_pax=$_am_tool
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5
+printf "%s\n" "$am_cv_prog_tar_pax" >&6; }
+
+
+
+
+
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+ CTAGS=ctags
+fi
+
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+
+if test -z "$CSCOPE"; then
+ CSCOPE=cscope
+fi
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+ fi
+fi
+
+# Check whether --enable-silent-rules was given.
+if test ${enable_silent_rules+y}
+then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if printf "%s\n" 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+
+
+
+
+
+
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+ (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ case $?:`cat confinc.out 2>/dev/null` in #(
+ '0:this is the am__doit target') :
+ case $s in #(
+ BSD) :
+ am__include='.include' am__quote='"' ;; #(
+ *) :
+ am__include='include' am__quote='' ;;
+esac ;; #(
+ *) :
+ ;;
+esac
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+printf "%s\n" "${_am_result}" >&6; }
+
+# Check whether --enable-dependency-tracking was given.
+if test ${enable_dependency_tracking+y}
+then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion -version; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else $as_nop
+ ac_file=''
+fi
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main (void)
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+y}
+ac_save_CFLAGS=$CFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+else $as_nop
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
+do
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
+ fi
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
+ fi
+done
+
+
+
+
+
+
+
+
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
+
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test ${ac_cv_safe_to_define___extensions__+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# define __EXTENSIONS__ 1
+ $ac_includes_default
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_safe_to_define___extensions__=yes
+else $as_nop
+ ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
+printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; }
+if test ${ac_cv_should_define__xopen_source+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_should_define__xopen_source=no
+ if test $ac_cv_header_wchar_h = yes
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <wchar.h>
+ mbstate_t x;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #define _XOPEN_SOURCE 500
+ #include <wchar.h>
+ mbstate_t x;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_should_define__xopen_source=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
+printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
+
+ printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
+
+ printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
+
+ printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+ if test $ac_cv_header_minix_config_h = yes
+then :
+ MINIX=yes
+ printf "%s\n" "#define _MINIX 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+else $as_nop
+ MINIX=
+fi
+ if test $ac_cv_safe_to_define___extensions__ = yes
+then :
+ printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h
+
+fi
+ if test $ac_cv_should_define__xopen_source = yes
+then :
+ printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CXX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+printf "%s\n" "$CXX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CXX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+printf "%s\n" "$ac_ct_CXX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5
+printf %s "checking whether the compiler supports GNU C++... " >&6; }
+if test ${ac_cv_cxx_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+y}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+printf %s "checking whether $CXX accepts -g... " >&6; }
+if test ${ac_cv_prog_cxx_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_g=yes
+else $as_nop
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+printf "%s\n" "$ac_cv_prog_cxx_g" >&6; }
+if test $ac_test_CXXFLAGS; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_prog_cxx_stdcxx=no
+if test x$ac_prog_cxx_stdcxx = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
+printf %s "checking for $CXX option to enable C++11 features... " >&6; }
+if test ${ac_cv_prog_cxx_cxx11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cxx_cxx11=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_cxx_conftest_cxx11_program
+_ACEOF
+for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA
+do
+ CXX="$ac_save_CXX $ac_arg"
+ if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_cxx11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cxx_cxx11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+fi
+
+if test "x$ac_cv_prog_cxx_cxx11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cxx_cxx11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5
+printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; }
+ CXX="$CXX $ac_cv_prog_cxx_cxx11"
+fi
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
+ ac_prog_cxx_stdcxx=cxx11
+fi
+fi
+if test x$ac_prog_cxx_stdcxx = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
+printf %s "checking for $CXX option to enable C++98 features... " >&6; }
+if test ${ac_cv_prog_cxx_cxx98+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cxx_cxx98=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_cxx_conftest_cxx98_program
+_ACEOF
+for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA
+do
+ CXX="$ac_save_CXX $ac_arg"
+ if ac_fn_cxx_try_compile "$LINENO"
+then :
+ ac_cv_prog_cxx_cxx98=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cxx_cxx98" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+fi
+
+if test "x$ac_cv_prog_cxx_cxx98" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cxx_cxx98" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5
+printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; }
+ CXX="$CXX $ac_cv_prog_cxx_cxx98"
+fi
+ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98
+ ac_prog_cxx_stdcxx=cxx98
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CXX_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CXX_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion -version; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+y}
+ac_save_CFLAGS=$CFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+else $as_nop
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+printf %s "checking whether NLS is requested... " >&6; }
+ # Check whether --enable-nls was given.
+if test ${enable_nls+y}
+then :
+ enableval=$enable_nls; USE_NLS=$enableval
+else $as_nop
+ USE_NLS=yes
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
+
+
+
+
+ for ac_prog in po4a
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_PO4A+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$PO4A"; then
+ ac_cv_prog_PO4A="$PO4A" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_PO4A="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+PO4A=$ac_cv_prog_PO4A
+if test -n "$PO4A"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PO4A" >&5
+printf "%s\n" "$PO4A" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$PO4A" && break
+done
+
+ if test "$USE_NLS" = "yes" && test -n "$PO4A"
+then :
+
+ USE_PO4A=yes
+
+else $as_nop
+
+ USE_PO4A=no
+
+fi
+
+
+
+# SELinux support - off by default
+DL_LIB=
+
+# Check whether --enable-selinux was given.
+if test ${enable_selinux+y}
+then :
+ enableval=$enable_selinux; enable_selinux=$enableval
+else $as_nop
+ enable_selinux="no"
+fi
+
+if test "$enable_selinux" = "yes"; then
+
+printf "%s\n" "#define WITH_SELINUX 1" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
+printf %s "checking for library containing dlopen... " >&6; }
+if test ${ac_cv_search_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' dl
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_dlopen=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_dlopen+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_dlopen+y}
+then :
+
+else $as_nop
+ ac_cv_search_dlopen=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
+printf "%s\n" "$ac_cv_search_dlopen" >&6; }
+ac_res=$ac_cv_search_dlopen
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else $as_nop
+ as_fn_error $? "dynamic linking unavailable, circumvent with --disable-selinux" "$LINENO" 5
+fi
+
+ if test "x$ac_cv_search_dlopen" != "xnone required"; then
+ DL_LIB="$ac_cv_search_dlopen"
+ fi
+fi
+
+
+# AppArmor support - off by default
+DL_LIB=
+
+# Check whether --enable-apparmor was given.
+if test ${enable_apparmor+y}
+then :
+ enableval=$enable_apparmor; enable_apparmor=$enableval
+else $as_nop
+ enable_apparmor="no"
+fi
+
+if test "$enable_apparmor" = "yes"; then
+
+printf "%s\n" "#define WITH_APPARMOR 1" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
+printf %s "checking for library containing dlopen... " >&6; }
+if test ${ac_cv_search_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' dl
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_dlopen=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_dlopen+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_dlopen+y}
+then :
+
+else $as_nop
+ ac_cv_search_dlopen=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
+printf "%s\n" "$ac_cv_search_dlopen" >&6; }
+ac_res=$ac_cv_search_dlopen
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else $as_nop
+ as_fn_error $? "dynamic linking unavailable, circumvent with --disable-apparmor" "$LINENO" 5
+fi
+
+ ac_fn_c_check_header_compile "$LINENO" "sys/apparmor.h" "ac_cv_header_sys_apparmor_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_apparmor_h" = xyes
+then :
+
+else $as_nop
+ as_fn_error $? "Need AppArmor header files, circumvent with --disable-apparmor" "$LINENO" 5
+fi
+
+ if test "x$ac_cv_search_dlopen" != "xnone required"; then
+ DL_LIB="$ac_cv_search_dlopen"
+ fi
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
+printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
+if test ${ac_cv_c_undeclared_builtin_options+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_CFLAGS=$CFLAGS
+ ac_cv_c_undeclared_builtin_options='cannot detect'
+ for ac_arg in '' -fno-builtin; do
+ CFLAGS="$ac_save_CFLAGS $ac_arg"
+ # This test program should *not* compile successfully.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+(void) strchr;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ # This test program should compile successfully.
+ # No library function is consistently available on
+ # freestanding implementations, so test against a dummy
+ # declaration. Include always-available headers on the
+ # off chance that they somehow elicit warnings.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stddef.h>
+extern void ac_decl (int, char *);
+
+int
+main (void)
+{
+(void) ac_decl (0, (char *) 0);
+ (void) ac_decl;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ if test x"$ac_arg" = x
+then :
+ ac_cv_c_undeclared_builtin_options='none needed'
+else $as_nop
+ ac_cv_c_undeclared_builtin_options=$ac_arg
+fi
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+ CFLAGS=$ac_save_CFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
+printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
+ case $ac_cv_c_undeclared_builtin_options in #(
+ 'cannot detect') :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot make $CC report undeclared builtins
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+ 'none needed') :
+ ac_c_undeclared_builtin_options='' ;; #(
+ *) :
+ ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;;
+esac
+
+ac_fn_check_decl "$LINENO" "SYS_statx" "ac_cv_have_decl_SYS_statx" "#include <sys/syscall.h>
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SYS_statx" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_SYS_STATX $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
+ has_syscall_statx="yes"
+else $as_nop
+ has_syscall_statx="no"
+fi
+
+
+# Check for linux specific statx(2) system call
+ac_fn_c_check_header_compile "$LINENO" "sys/syscall.h" "ac_cv_header_sys_syscall_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_syscall_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SYSCALL_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "statx" "ac_cv_func_statx"
+if test "x$ac_cv_func_statx" = xyes
+then :
+ printf "%s\n" "#define HAVE_STATX 1" >>confdefs.h
+
+fi
+
+ac_fn_check_decl "$LINENO" "STATX_TYPE" "ac_cv_have_decl_STATX_TYPE" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_STATX_TYPE" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_STATX_TYPE $ac_have_decl" >>confdefs.h
+
+
+
+# Check whether --enable-statx was given.
+if test ${enable_statx+y}
+then :
+ enableval=$enable_statx;
+else $as_nop
+ enable_statx="yes"
+fi
+
+if test "$enable_statx" = "yes"; then
+
+printf "%s\n" "#define WITH_STATX 1" >>confdefs.h
+
+ if test "$has_syscall_statx" = "no" && "$have_statx" = "no"; then
+ as_fn_error $? "statx() and SYS_statx not found, use --disable-statx to not use statx" "$LINENO" 5
+ fi
+ fi
+
+# Enable hardened compile and link flags
+# Check whether --enable-harden_flags was given.
+if test ${enable_harden_flags+y}
+then :
+ enableval=$enable_harden_flags; enable_harden_flags=$enableval
+else $as_nop
+ enable_harden_flags="yes"
+fi
+
+
+
+# Check whether --enable-ipv6 was given.
+if test ${enable_ipv6+y}
+then :
+ enableval=$enable_ipv6; enable_ipv6=$enableval
+else $as_nop
+ enable_ipv6="yes"
+fi
+
+if test "$enable_ipv6" = "yes"; then
+
+printf "%s\n" "#define WITH_IPV6 1" >>confdefs.h
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5
+printf %s "checking for tgetent in -ltinfo... " >&6; }
+if test ${ac_cv_lib_tinfo_tgetent+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ltinfo $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char tgetent ();
+int
+main (void)
+{
+return tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_tinfo_tgetent=yes
+else $as_nop
+ ac_cv_lib_tinfo_tgetent=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_tinfo_tgetent" >&6; }
+if test "x$ac_cv_lib_tinfo_tgetent" = xyes
+then :
+ TERMCAP_LIB=-ltinfo
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5
+printf %s "checking for tgetent in -lncurses... " >&6; }
+if test ${ac_cv_lib_ncurses_tgetent+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lncurses $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char tgetent ();
+int
+main (void)
+{
+return tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_ncurses_tgetent=yes
+else $as_nop
+ ac_cv_lib_ncurses_tgetent=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_ncurses_tgetent" >&6; }
+if test "x$ac_cv_lib_ncurses_tgetent" = xyes
+then :
+ TERMCAP_LIB=-lncurses
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5
+printf %s "checking for tgetent in -ltermcap... " >&6; }
+if test ${ac_cv_lib_termcap_tgetent+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ltermcap $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char tgetent ();
+int
+main (void)
+{
+return tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_termcap_tgetent=yes
+else $as_nop
+ ac_cv_lib_termcap_tgetent=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_termcap_tgetent" >&6; }
+if test "x$ac_cv_lib_termcap_tgetent" = xyes
+then :
+ TERMCAP_LIB=-ltermcap
+else $as_nop
+ as_fn_error $? "Cannot find tinfo, ncurses or termcap libraries" "$LINENO" 5
+
+fi
+
+
+fi
+
+
+fi
+
+
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+printf %s "checking for $ac_hdr that defines DIR... " >&6; }
+if eval test \${$as_ac_Header+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main (void)
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_ac_Header=yes"
+else $as_nop
+ eval "$as_ac_Header=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$as_ac_Header
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
+ cat >>confdefs.h <<_ACEOF
+#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main (void)
+{
+return opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' dir
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_opendir+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_opendir+y}
+then :
+
+else $as_nop
+ ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main (void)
+{
+return opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' x
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_opendir+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_opendir+y}
+then :
+
+else $as_nop
+ ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+if test ${ac_cv_header_sys_wait_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+
+int
+main (void)
+{
+ int s;
+ wait (&s);
+ s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_header_sys_wait_h=yes
+else $as_nop
+ ac_cv_header_sys_wait_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
+printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; }
+if test $ac_cv_header_sys_wait_h = yes; then
+
+printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default"
+if test "x$ac_cv_header_arpa_inet_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_langinfo_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LANGINFO_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default"
+if test "x$ac_cv_header_libintl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default"
+if test "x$ac_cv_header_limits_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default"
+if test "x$ac_cv_header_locale_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "mntent.h" "ac_cv_header_mntent_h" "$ac_includes_default"
+if test "x$ac_cv_header_mntent_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_MNTENT_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default"
+if test "x$ac_cv_header_netdb_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default"
+if test "x$ac_cv_header_netinet_in_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ioctl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default"
+if test "x$ac_cv_header_termios_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_TERMIOS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+printf %s "checking for an ANSI C-conforming const... " >&6; }
+if test ${ac_cv_c_const+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this sort of thing. */
+ typedef int charset[2];
+ const charset cs = { 0, 0 };
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* IBM XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this sort of thing. */
+ char tx;
+ char *t = &tx;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; } bx;
+ struct s *b = &bx; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_const=yes
+else $as_nop
+ ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+printf "%s\n" "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+printf "%s\n" "#define const /**/" >>confdefs.h
+
+fi
+
+
+ ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default
+"
+if test "x$ac_cv_type_pid_t" = xyes
+then :
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if defined _WIN64 && !defined __CYGWIN__
+ LLP64
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_pid_type='int'
+else $as_nop
+ ac_pid_type='__int64'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h
+
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define size_t unsigned int" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_rdev" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_RDEV 1" >>confdefs.h
+
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test ${ac_cv_prog_CPP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Double quotes because $CC needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in grep ggrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in egrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+printf %s "checking for uid_t in sys/types.h... " >&6; }
+if test ${ac_cv_type_uid_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "uid_t" >/dev/null 2>&1
+then :
+ ac_cv_type_uid_t=yes
+else $as_nop
+ ac_cv_type_uid_t=no
+fi
+rm -rf conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
+printf "%s\n" "$ac_cv_type_uid_t" >&6; }
+if test $ac_cv_type_uid_t = no; then
+
+printf "%s\n" "#define uid_t int" >>confdefs.h
+
+
+printf "%s\n" "#define gid_t int" >>confdefs.h
+
+fi
+
+
+# Check that harden CFLAGS and LDFLAGS will compile
+if test "$enable_harden_flags" = "yes"
+then :
+ HARDEN_CFLAGS="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security"
+ HARDEN_LDFLAGS="-Wl,-z,relro"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking compiler supports harden flags" >&5
+printf %s "checking compiler supports harden flags... " >&6; }
+ save_harden_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS $HARDEN_CFLAGS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }; HARDEN_CFLAGS=''
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$save_harden_cflags"
+else $as_nop
+ HARDEN_CFLAGS=""
+ HARDEN_LDFLAGS=""
+fi
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+printf %s "checking for a sed that does not truncate output... " >&6; }
+if test ${ac_cv_path_SED+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in sed gsed
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+printf "%s\n" "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+
+
+ GETTEXT_MACRO_VERSION=0.20
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGFMT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$MSGFMT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+printf "%s\n" "$MSGFMT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GMSGFMT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $GMSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+printf "%s\n" "$GMSGFMT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_XGETTEXT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$XGETTEXT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+printf "%s\n" "$XGETTEXT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ rm -f messages.po
+
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGMERGE+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+printf "%s\n" "$MSGMERGE" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then
+ MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt'
+ else
+ if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then
+ MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet'
+ else
+ MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet'
+ fi
+ fi
+
+
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+ ac_config_commands="$ac_config_commands po-directories"
+
+
+
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test ${with_gnu_ld+y}
+then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else $as_nop
+ with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+if test -n "$LD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5
+printf %s "checking for ld... " >&6; }
+elif test "$GCC" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
+elif test "$with_gnu_ld" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
+fi
+if test -n "$LD"; then
+ # Let the user override the test with a path.
+ :
+else
+ if test ${acl_cv_path_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ acl_cv_path_LD= # Final result of this test
+ ac_prog=ld # Program to search in $PATH
+ if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ acl_output=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $acl_output in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'`
+ while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do
+ acl_output=`echo $acl_output | sed "s%$re_direlt%/%"`
+ done
+ # Got the pathname. No search in PATH is needed.
+ acl_cv_path_LD="$acl_output"
+ ac_prog=
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+ fi
+ if test -n "$ac_prog"; then
+ # Search for $ac_prog in $PATH.
+ acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$acl_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_ifs"
+ fi
+ case $host in
+ *-*-aix*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined __powerpc64__ || defined _ARCH_PPC64
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ # The compiler produces 64-bit code. Add option '-b64' so that the
+ # linker groks 64-bit object files.
+ case "$acl_cv_path_LD " in
+ *" -b64 "*) ;;
+ *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;;
+ esac
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+ sparc64-*-netbsd*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined __sparcv9 || defined __arch64__
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ # The compiler produces 32-bit code. Add option '-m elf32_sparc'
+ # so that the linker groks 32-bit object files.
+ case "$acl_cv_path_LD " in
+ *" -m elf32_sparc "*) ;;
+ *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;;
+ esac
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+ esac
+
+fi
+
+ LD="$acl_cv_path_LD"
+fi
+if test -n "$LD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${acl_cv_prog_gnu_ld+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes
+ ;;
+*)
+ acl_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+printf %s "checking for shared library run path origin... " >&6; }
+if test ${acl_cv_rpath+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+printf "%s\n" "$acl_cv_rpath" >&6; }
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ # Check whether --enable-rpath was given.
+if test ${enable_rpath+y}
+then :
+ enableval=$enable_rpath; :
+else $as_nop
+ enable_rpath=yes
+fi
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5
+printf %s "checking 32-bit host C ABI... " >&6; }
+if test ${gl_cv_host_cpu_c_abi_32bit+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$gl_cv_host_cpu_c_abi"; then
+ case "$gl_cv_host_cpu_c_abi" in
+ i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
+ gl_cv_host_cpu_c_abi_32bit=yes ;;
+ x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 )
+ gl_cv_host_cpu_c_abi_32bit=no ;;
+ *)
+ gl_cv_host_cpu_c_abi_32bit=unknown ;;
+ esac
+ else
+ case "$host_cpu" in
+
+ # CPUs that only support a 32-bit ABI.
+ arc \
+ | bfin \
+ | cris* \
+ | csky \
+ | epiphany \
+ | ft32 \
+ | h8300 \
+ | m68k \
+ | microblaze | microblazeel \
+ | nds32 | nds32le | nds32be \
+ | nios2 | nios2eb | nios2el \
+ | or1k* \
+ | or32 \
+ | sh | sh1234 | sh1234elb \
+ | tic6x \
+ | xtensa* )
+ gl_cv_host_cpu_c_abi_32bit=yes
+ ;;
+
+ # CPUs that only support a 64-bit ABI.
+ alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \
+ | mmix )
+ gl_cv_host_cpu_c_abi_32bit=no
+ ;;
+
+ i[34567]86 )
+ gl_cv_host_cpu_c_abi_32bit=yes
+ ;;
+
+ x86_64 )
+ # On x86_64 systems, the C compiler may be generating code in one of
+ # these ABIs:
+ # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+ # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+ # with native Windows (mingw, MSVC).
+ # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+ # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if (defined __x86_64__ || defined __amd64__ \
+ || defined _M_X64 || defined _M_AMD64) \
+ && !(defined __ILP32__ || defined _ILP32)
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_host_cpu_c_abi_32bit=no
+else $as_nop
+ gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+
+ arm* | aarch64 )
+ # Assume arm with EABI.
+ # On arm64 systems, the C compiler may be generating code in one of
+ # these ABIs:
+ # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+ # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+ # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_host_cpu_c_abi_32bit=no
+else $as_nop
+ gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+
+ hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+ # On hppa, the C compiler may be generating 32-bit code or 64-bit
+ # code. In the latter case, it defines _LP64 and __LP64__.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __LP64__
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_host_cpu_c_abi_32bit=no
+else $as_nop
+ gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+
+ ia64* )
+ # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+ # 32-bit code. In the latter case, it defines _ILP32.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef _ILP32
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_host_cpu_c_abi_32bit=yes
+else $as_nop
+ gl_cv_host_cpu_c_abi_32bit=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+
+ mips* )
+ # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+ # at 32.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_host_cpu_c_abi_32bit=no
+else $as_nop
+ gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+
+ powerpc* )
+ # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+ # No need to distinguish them here; the caller may distinguish
+ # them based on the OS.
+ # On powerpc64 systems, the C compiler may still be generating
+ # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+ # be generating 64-bit code.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined __powerpc64__ || defined _ARCH_PPC64
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_host_cpu_c_abi_32bit=no
+else $as_nop
+ gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+
+ rs6000 )
+ gl_cv_host_cpu_c_abi_32bit=yes
+ ;;
+
+ riscv32 | riscv64 )
+ # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+ # Size of 'long' and 'void *':
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined __LP64__
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_host_cpu_c_abi_32bit=no
+else $as_nop
+ gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+
+ s390* )
+ # On s390x, the C compiler may be generating 64-bit (= s390x) code
+ # or 31-bit (= s390) code.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined __LP64__ || defined __s390x__
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_host_cpu_c_abi_32bit=no
+else $as_nop
+ gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+
+ sparc | sparc64 )
+ # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+ # C compiler still generates 32-bit code.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined __sparcv9 || defined __arch64__
+ int ok;
+ #else
+ error fail
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_host_cpu_c_abi_32bit=no
+else $as_nop
+ gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+
+ *)
+ gl_cv_host_cpu_c_abi_32bit=unknown
+ ;;
+ esac
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5
+printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; }
+
+ HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5
+printf %s "checking for ELF binary format... " >&6; }
+if test ${gl_cv_elf+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __ELF__
+ Extensible Linking Format
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Extensible Linking Format" >/dev/null 2>&1
+then :
+ gl_cv_elf=yes
+else $as_nop
+ gl_cv_elf=no
+fi
+rm -rf conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5
+printf "%s\n" "$gl_cv_elf" >&6; }
+ if test $gl_cv_elf; then
+ # Extract the ELF class of a file (5th byte) in decimal.
+ # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
+ if od -A x < /dev/null >/dev/null 2>/dev/null; then
+ # Use POSIX od.
+ func_elfclass ()
+ {
+ od -A n -t d1 -j 4 -N 1
+ }
+ else
+ # Use BSD hexdump.
+ func_elfclass ()
+ {
+ dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "'
+ echo
+ }
+ fi
+ case $HOST_CPU_C_ABI_32BIT in
+ yes)
+ # 32-bit ABI.
+ acl_is_expected_elfclass ()
+ {
+ test "`func_elfclass | sed -e 's/[ ]//g'`" = 1
+ }
+ ;;
+ no)
+ # 64-bit ABI.
+ acl_is_expected_elfclass ()
+ {
+ test "`func_elfclass | sed -e 's/[ ]//g'`" = 2
+ }
+ ;;
+ *)
+ # Unknown.
+ acl_is_expected_elfclass ()
+ {
+ :
+ }
+ ;;
+ esac
+ else
+ acl_is_expected_elfclass ()
+ {
+ :
+ }
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5
+printf %s "checking for the common suffixes of directories in the library search path... " >&6; }
+if test ${acl_cv_libdirstems+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ acl_libdirstem3=
+ case "$host_os" in
+ solaris*)
+ if test $HOST_CPU_C_ABI_32BIT = no; then
+ acl_libdirstem2=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem3=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem3=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \
+ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test $HOST_CPU_C_ABI_32BIT != no; then
+ # 32-bit or unknown ABI.
+ if test -d /usr/lib32; then
+ acl_libdirstem2=lib32
+ fi
+ fi
+ if test $HOST_CPU_C_ABI_32BIT != yes; then
+ # 64-bit or unknown ABI.
+ if test -d /usr/lib64; then
+ acl_libdirstem3=lib64
+ fi
+ fi
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;;
+ */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib32 ) acl_libdirstem2=lib32 ;;
+ */lib64 ) acl_libdirstem3=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ if test $HOST_CPU_C_ABI_32BIT = yes; then
+ # 32-bit ABI.
+ acl_libdirstem3=
+ fi
+ if test $HOST_CPU_C_ABI_32BIT = no; then
+ # 64-bit ABI.
+ acl_libdirstem2=
+ fi
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+ test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem"
+ acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5
+printf "%s\n" "$acl_cv_libdirstems" >&6; }
+ acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
+ acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'`
+ acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'`
+
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+ eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test ${with_libiconv_prefix+y}
+then :
+ withval=$with_libiconv_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+ eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ additional_libdir2="$withval/$acl_libdirstem2"
+ additional_libdir3="$withval/$acl_libdirstem3"
+ fi
+ fi
+
+fi
+
+ if test "X$additional_libdir2" = "X$additional_libdir"; then
+ additional_libdir2=
+ fi
+ if test "X$additional_libdir3" = "X$additional_libdir"; then
+ additional_libdir3=
+ fi
+ LIBICONV=
+ LTLIBICONV=
+ INCICONV=
+ LIBICONV_PREFIX=
+ HAVE_LIBICONV=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='iconv '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+ if test "X$found_dir" = "X"; then
+ eval dir=\$$additional_libdir_variable
+ if test -n "$dir"; then
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ fi
+ done
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem3 | */$acl_libdirstem3/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
+ haveit=
+ if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$dependency_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$dependency_libdir"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$dependency_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$dependency_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$dependency_libdir"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$dependency_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+printf %s "checking for CFPreferencesCopyAppValue... " >&6; }
+if test ${gt_cv_func_CFPreferencesCopyAppValue+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFPreferences.h>
+int
+main (void)
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else $as_nop
+ gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
+printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; }
+if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFLocale.h>
+int
+main (void)
+{
+CFLocaleCopyPreferredLanguages();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gt_cv_func_CFLocaleCopyPreferredLanguages=yes
+else $as_nop
+ gt_cv_func_CFLocaleCopyPreferredLanguages=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
+printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
+ if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+
+printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
+
+
+
+
+
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+printf %s "checking for GNU gettext in libc... " >&6; }
+if eval test \${$gt_func_gnugettext_libc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main (void)
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$gt_func_gnugettext_libc=yes"
+else $as_nop
+ eval "$gt_func_gnugettext_libc=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$gt_func_gnugettext_libc
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+ am_save_CPPFLAGS="$CPPFLAGS"
+
+ for element in $INCICONV; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+printf %s "checking for iconv... " >&6; }
+if test ${am_cv_func_iconv+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main (void)
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main (void)
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$am_save_LIBS"
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+printf "%s\n" "$am_cv_func_iconv" >&6; }
+ if test "$am_cv_func_iconv" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+printf %s "checking for working iconv... " >&6; }
+if test ${am_cv_func_iconv_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ am_cv_func_iconv_works=no
+ for ac_iconv_const in '' 'const'; do
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+
+int
+main (void)
+{
+int result = 0;
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 1;
+ iconv_close (cd_utf8_to_88591);
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\263";
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 2;
+ iconv_close (cd_ascii_to_88591);
+ }
+ }
+ /* Test against AIX 6.1..7.1 bug: Buffer overrun. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304";
+ static char buf[2] = { (char)0xDE, (char)0xAD };
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = 1;
+ char *outptr = buf;
+ size_t outbytesleft = 1;
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+ result |= 4;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ result |= 8;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ {
+ /* Try standardized names. */
+ iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
+ /* Try IRIX, OSF/1 names. */
+ iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
+ /* Try AIX names. */
+ iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
+ /* Try HP-UX names. */
+ iconv_t cd4 = iconv_open ("utf8", "eucJP");
+ if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
+ && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
+ result |= 16;
+ if (cd1 != (iconv_t)(-1))
+ iconv_close (cd1);
+ if (cd2 != (iconv_t)(-1))
+ iconv_close (cd2);
+ if (cd3 != (iconv_t)(-1))
+ iconv_close (cd3);
+ if (cd4 != (iconv_t)(-1))
+ iconv_close (cd4);
+ }
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ am_cv_func_iconv_works=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ test "$am_cv_func_iconv_works" = no || break
+ done
+ LIBS="$am_save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+printf "%s\n" "$am_cv_func_iconv_works" >&6; }
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+
+printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+printf %s "checking how to link with libiconv... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+printf "%s\n" "$LIBICONV" >&6; }
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+ eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test ${with_libintl_prefix+y}
+then :
+ withval=$with_libintl_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+ eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ additional_libdir2="$withval/$acl_libdirstem2"
+ additional_libdir3="$withval/$acl_libdirstem3"
+ fi
+ fi
+
+fi
+
+ if test "X$additional_libdir2" = "X$additional_libdir"; then
+ additional_libdir2=
+ fi
+ if test "X$additional_libdir3" = "X$additional_libdir"; then
+ additional_libdir3=
+ fi
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ LIBINTL_PREFIX=
+ HAVE_LIBINTL=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='intl '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+ if test "X$found_dir" = "X"; then
+ eval dir=\$$additional_libdir_variable
+ if test -n "$dir"; then
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ fi
+ done
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem3 | */$acl_libdirstem3/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
+ haveit=
+ if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$dependency_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$dependency_libdir"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$dependency_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$dependency_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$dependency_libdir"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$dependency_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+printf %s "checking for GNU gettext in libintl... " >&6; }
+if eval test \${$gt_func_gnugettext_libintl+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main (void)
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$gt_func_gnugettext_libintl=yes"
+else $as_nop
+ eval "$gt_func_gnugettext_libintl=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main (void)
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+eval ac_res=\$$gt_func_gnugettext_libintl
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ fi
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h
+
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+printf %s "checking whether to use NLS... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
+ if test "$USE_NLS" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+printf %s "checking where the gettext function comes from... " >&6; }
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+printf "%s\n" "$gt_source" >&6; }
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+printf %s "checking how to link with libintl... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+printf "%s\n" "$LIBINTL" >&6; }
+
+ for element in $INCINTL; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+ fi
+
+
+printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h
+
+ fi
+
+ POSUB=po
+ fi
+
+
+
+ INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "orig_eax" "ac_cv_member_struct_user_regs_struct_orig_eax" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_orig_eax" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_ORIG_EAX 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "eax" "ac_cv_member_struct_user_regs_struct_eax" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_eax" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_EAX 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "ebx" "ac_cv_member_struct_user_regs_struct_ebx" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_ebx" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_EBX 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "ecx" "ac_cv_member_struct_user_regs_struct_ecx" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_ecx" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_ECX 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "edx" "ac_cv_member_struct_user_regs_struct_edx" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_edx" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_EDX 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "orig_rax" "ac_cv_member_struct_user_regs_struct_orig_rax" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_orig_rax" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_ORIG_RAX 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "rax" "ac_cv_member_struct_user_regs_struct_rax" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_rax" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_RAX 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "rdi" "ac_cv_member_struct_user_regs_struct_rdi" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_rdi" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_RDI 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "rsi" "ac_cv_member_struct_user_regs_struct_rsi" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_rsi" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_RSI 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "rdx" "ac_cv_member_struct_user_regs_struct_rdx" "#include <bits/types.h>
+ #include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_rdx" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_REGS_STRUCT_RDX 1" >>confdefs.h
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct pt_regs" "orig_gpr3" "ac_cv_member_struct_pt_regs_orig_gpr3" "#include <linux/ptrace.h>
+"
+if test "x$ac_cv_member_struct_pt_regs_orig_gpr3" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_PT_REGS_ORIG_GPR3 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct pt_regs" "gpr" "ac_cv_member_struct_pt_regs_gpr" "#include <linux/ptrace.h>
+"
+if test "x$ac_cv_member_struct_pt_regs_gpr" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_PT_REGS_GPR 1" >>confdefs.h
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct pt_regs" "uregs" "ac_cv_member_struct_pt_regs_uregs" "#include <asm/ptrace.h>
+"
+if test "x$ac_cv_member_struct_pt_regs_uregs" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_PT_REGS_UREGS 1" >>confdefs.h
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct user_pt_regs" "regs" "ac_cv_member_struct_user_pt_regs_regs" "#include <asm/ptrace.h>
+"
+if test "x$ac_cv_member_struct_user_pt_regs_regs" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_USER_PT_REGS_REGS 1" >>confdefs.h
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct pt_regs" "regs" "ac_cv_member_struct_pt_regs_regs" "#include <asm/ptrace.h>
+"
+if test "x$ac_cv_member_struct_pt_regs_regs" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_PT_REGS_REGS 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct pt_regs" "cp0_status" "ac_cv_member_struct_pt_regs_cp0_status" "#include <asm/ptrace.h>
+"
+if test "x$ac_cv_member_struct_pt_regs_cp0_status" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_PT_REGS_CP0_STATUS 1" >>confdefs.h
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct pt_regs" "orig_d0" "ac_cv_member_struct_pt_regs_orig_d0" "#include <asm/ptrace.h>
+"
+if test "x$ac_cv_member_struct_pt_regs_orig_d0" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_PT_REGS_ORIG_D0 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct pt_regs" "d0" "ac_cv_member_struct_pt_regs_d0" "#include <asm/ptrace.h>
+"
+if test "x$ac_cv_member_struct_pt_regs_d0" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_PT_REGS_D0 1" >>confdefs.h
+
+
+fi
+
+
+case ${host_os} in
+ gnu*)
+ want_fuser=no
+ ;;
+ *)
+ want_fuser=yes
+ ;;
+esac
+ if test $want_fuser = yes; then
+ WANT_FUSER_TRUE=
+ WANT_FUSER_FALSE='#'
+else
+ WANT_FUSER_TRUE='#'
+ WANT_FUSER_FALSE=
+fi
+
+
+ if test $ac_cv_member_struct_user_regs_struct_orig_eax = yes &&
+ test $ac_cv_member_struct_user_regs_struct_eax = yes &&
+ test $ac_cv_member_struct_user_regs_struct_ebx = yes &&
+ test $ac_cv_member_struct_user_regs_struct_ecx = yes &&
+ test $ac_cv_member_struct_user_regs_struct_edx = yes ; then
+ WANT_PEEKFD_I386_TRUE=
+ WANT_PEEKFD_I386_FALSE='#'
+else
+ WANT_PEEKFD_I386_TRUE='#'
+ WANT_PEEKFD_I386_FALSE=
+fi
+
+ if test $ac_cv_member_struct_user_regs_struct_orig_rax = yes &&
+ test $ac_cv_member_struct_user_regs_struct_rax = yes &&
+ test $ac_cv_member_struct_user_regs_struct_rdi = yes &&
+ test $ac_cv_member_struct_user_regs_struct_rsi = yes &&
+ test $ac_cv_member_struct_user_regs_struct_rdx = yes ; then
+ WANT_PEEKFD_X86_64_TRUE=
+ WANT_PEEKFD_X86_64_FALSE='#'
+else
+ WANT_PEEKFD_X86_64_TRUE='#'
+ WANT_PEEKFD_X86_64_FALSE=
+fi
+
+ if test $ac_cv_member_struct_pt_regs_orig_gpr3 = yes &&
+ test $ac_cv_member_struct_pt_regs_gpr = yes ; then
+ WANT_PEEKFD_PPC_TRUE=
+ WANT_PEEKFD_PPC_FALSE='#'
+else
+ WANT_PEEKFD_PPC_TRUE='#'
+ WANT_PEEKFD_PPC_FALSE=
+fi
+
+ if test $ac_cv_member_struct_pt_regs_uregs = yes; then
+ WANT_PEEKFD_ARM_TRUE=
+ WANT_PEEKFD_ARM_FALSE='#'
+else
+ WANT_PEEKFD_ARM_TRUE='#'
+ WANT_PEEKFD_ARM_FALSE=
+fi
+
+ if test $ac_cv_member_struct_user_pt_regs_regs = yes; then
+ WANT_PEEKFD_ARM64_TRUE=
+ WANT_PEEKFD_ARM64_FALSE='#'
+else
+ WANT_PEEKFD_ARM64_TRUE='#'
+ WANT_PEEKFD_ARM64_FALSE=
+fi
+
+ if test $build_cpu = mipsel &&
+ test $ac_cv_member_struct_pt_regs_regs = yes &&
+ test $ac_cv_member_struct_pt_regs_cp0_status = yes; then
+ WANT_PEEKFD_MIPS_TRUE=
+ WANT_PEEKFD_MIPS_FALSE='#'
+else
+ WANT_PEEKFD_MIPS_TRUE='#'
+ WANT_PEEKFD_MIPS_FALSE=
+fi
+
+ if test $ac_cv_member_struct_pt_regs_orig_d0 = yes &&
+ test $ac_cv_member_struct_pt_regs_d0 = yes; then
+ WANT_PEEKFD_M68K_TRUE=
+ WANT_PEEKFD_M68K_FALSE='#'
+else
+ WANT_PEEKFD_M68K_TRUE='#'
+ WANT_PEEKFD_M68K_FALSE=
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5
+printf %s "checking whether closedir returns void... " >&6; }
+if test ${ac_cv_func_closedir_void+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <$ac_header_dirent>
+
+int
+main (void)
+{
+
+ return closedir(0);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_func_closedir_void=no
+else $as_nop
+ ac_cv_func_closedir_void=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5
+printf "%s\n" "$ac_cv_func_closedir_void" >&6; }
+if test $ac_cv_func_closedir_void = yes; then
+
+printf "%s\n" "#define CLOSEDIR_VOID 1" >>confdefs.h
+
+fi
+
+# getmntent is in the standard C library on UNICOS, in -lsun on Irix 4,
+# -lseq on Dynix/PTX, -lgen on Unixware.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing getmntent" >&5
+printf %s "checking for library containing getmntent... " >&6; }
+if test ${ac_cv_search_getmntent+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char getmntent ();
+int
+main (void)
+{
+return getmntent ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' sun seq gen
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_getmntent=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_getmntent+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_getmntent+y}
+then :
+
+else $as_nop
+ ac_cv_search_getmntent=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getmntent" >&5
+printf "%s\n" "$ac_cv_search_getmntent" >&6; }
+ac_res=$ac_cv_search_getmntent
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ ac_cv_func_getmntent=yes
+
+printf "%s\n" "#define HAVE_GETMNTENT 1" >>confdefs.h
+
+else $as_nop
+ ac_cv_func_getmntent=no
+fi
+
+
+if test $ac_cv_c_compiler_gnu = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
+printf %s "checking whether $CC needs -traditional... " >&6; }
+if test ${ac_cv_prog_gcc_traditional+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_pattern="Autoconf.*'x'"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sgtty.h>
+Autoconf TIOCGETP
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
+ ac_cv_prog_gcc_traditional=yes
+else $as_nop
+ ac_cv_prog_gcc_traditional=no
+fi
+rm -rf conftest*
+
+
+ if test $ac_cv_prog_gcc_traditional = no; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <termio.h>
+Autoconf TCGETA
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
+ ac_cv_prog_gcc_traditional=yes
+fi
+rm -rf conftest*
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
+printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; }
+ if test $ac_cv_prog_gcc_traditional = yes; then
+ CC="$CC -traditional"
+ fi
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
+printf %s "checking whether lstat correctly handles trailing slash... " >&6; }
+if test ${ac_cv_func_lstat_dereferences_slashed_symlink+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -f conftest.sym conftest.file
+echo >conftest.file
+if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in # ((
+ # Guess yes on glibc systems.
+ *-gnu*) ac_cv_func_lstat_dereferences_slashed_symlink=yes ;;
+ # If we don't know, assume the worst.
+ *) ac_cv_func_lstat_dereferences_slashed_symlink=no ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+struct stat sbuf;
+ /* Linux will dereference the symlink and fail, as required by POSIX.
+ That is better in the sense that it means we will not
+ have to compile and use the lstat wrapper. */
+ return lstat ("conftest.sym/", &sbuf) == 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_lstat_dereferences_slashed_symlink=yes
+else $as_nop
+ ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+else
+ # If the `ln -s' command failed, then we probably don't even
+ # have an lstat function.
+ ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f conftest.sym conftest.file
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
+printf "%s\n" "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
+
+test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
+
+printf "%s\n" "#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1" >>confdefs.h
+
+
+if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
+ case " $LIBOBJS " in
+ *" lstat.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
+ ;;
+esac
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat accepts an empty string" >&5
+printf %s "checking whether lstat accepts an empty string... " >&6; }
+if test ${ac_cv_func_lstat_empty_string_bug+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ ac_cv_func_lstat_empty_string_bug=yes
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+struct stat sbuf;
+ return lstat ("", &sbuf) == 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_lstat_empty_string_bug=no
+else $as_nop
+ ac_cv_func_lstat_empty_string_bug=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_empty_string_bug" >&5
+printf "%s\n" "$ac_cv_func_lstat_empty_string_bug" >&6; }
+if test $ac_cv_func_lstat_empty_string_bug = yes; then
+ case " $LIBOBJS " in
+ *" lstat.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
+ ;;
+esac
+
+
+printf "%s\n" "#define HAVE_LSTAT_EMPTY_STRING_BUG 1" >>confdefs.h
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
+printf %s "checking whether lstat correctly handles trailing slash... " >&6; }
+if test ${ac_cv_func_lstat_dereferences_slashed_symlink+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -f conftest.sym conftest.file
+echo >conftest.file
+if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in # ((
+ # Guess yes on glibc systems.
+ *-gnu*) ac_cv_func_lstat_dereferences_slashed_symlink=yes ;;
+ # If we don't know, assume the worst.
+ *) ac_cv_func_lstat_dereferences_slashed_symlink=no ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+struct stat sbuf;
+ /* Linux will dereference the symlink and fail, as required by POSIX.
+ That is better in the sense that it means we will not
+ have to compile and use the lstat wrapper. */
+ return lstat ("conftest.sym/", &sbuf) == 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_lstat_dereferences_slashed_symlink=yes
+else $as_nop
+ ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+else
+ # If the `ln -s' command failed, then we probably don't even
+ # have an lstat function.
+ ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f conftest.sym conftest.file
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
+printf "%s\n" "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
+
+test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
+
+printf "%s\n" "#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1" >>confdefs.h
+
+
+if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
+ case " $LIBOBJS " in
+ *" lstat.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
+ ;;
+esac
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
+printf %s "checking for GNU libc compatible malloc... " >&6; }
+if test ${ac_cv_func_malloc_0_nonnull+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in # ((
+ # Guess yes on platforms where we know the result.
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
+ ac_cv_func_malloc_0_nonnull=yes ;;
+ # If we don't know, assume the worst.
+ *) ac_cv_func_malloc_0_nonnull=no ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+int
+main (void)
+{
+void *p = malloc (0);
+ int result = !p;
+ free (p);
+ return result;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_malloc_0_nonnull=yes
+else $as_nop
+ ac_cv_func_malloc_0_nonnull=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
+printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; }
+if test $ac_cv_func_malloc_0_nonnull = yes
+then :
+
+printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h
+
+else $as_nop
+ printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h
+
+ case " $LIBOBJS " in
+ *" malloc.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS malloc.$ac_objext"
+ ;;
+esac
+
+
+printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
+printf %s "checking for working memcmp... " >&6; }
+if test ${ac_cv_func_memcmp_working+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ ac_cv_func_memcmp_working=no
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+
+ /* Some versions of memcmp are not 8-bit clean. */
+ char c0 = '\100', c1 = '\200', c2 = '\201';
+ if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
+ return 1;
+
+ /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
+ or more and with at least one buffer not starting on a 4-byte boundary.
+ William Lewis provided this test program. */
+ {
+ char foo[21];
+ char bar[21];
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ char *a = foo + i;
+ char *b = bar + i;
+ strcpy (a, "--------01111111");
+ strcpy (b, "--------10000000");
+ if (memcmp (a, b, 16) >= 0)
+ return 1;
+ }
+ return 0;
+ }
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_memcmp_working=yes
+else $as_nop
+ ac_cv_func_memcmp_working=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5
+printf "%s\n" "$ac_cv_func_memcmp_working" >&6; }
+test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
+ *" memcmp.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS memcmp.$ac_objext"
+ ;;
+esac
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5
+printf %s "checking for GNU libc compatible realloc... " >&6; }
+if test ${ac_cv_func_realloc_0_nonnull+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in # ((
+ # Guess yes on platforms where we know the result.
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
+ ac_cv_func_realloc_0_nonnull=yes ;;
+ # If we don't know, assume the worst.
+ *) ac_cv_func_realloc_0_nonnull=no ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+int
+main (void)
+{
+void *p = realloc (0, 0);
+ int result = !p;
+ free (p);
+ return result;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_realloc_0_nonnull=yes
+else $as_nop
+ ac_cv_func_realloc_0_nonnull=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5
+printf "%s\n" "$ac_cv_func_realloc_0_nonnull" >&6; }
+if test $ac_cv_func_realloc_0_nonnull = yes
+then :
+
+printf "%s\n" "#define HAVE_REALLOC 1" >>confdefs.h
+
+else $as_nop
+ printf "%s\n" "#define HAVE_REALLOC 0" >>confdefs.h
+
+ case " $LIBOBJS " in
+ *" realloc.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS realloc.$ac_objext"
+ ;;
+esac
+
+
+printf "%s\n" "#define realloc rpl_realloc" >>confdefs.h
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5
+printf %s "checking whether stat accepts an empty string... " >&6; }
+if test ${ac_cv_func_stat_empty_string_bug+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ ac_cv_func_stat_empty_string_bug=yes
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+struct stat sbuf;
+ return stat ("", &sbuf) == 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_stat_empty_string_bug=no
+else $as_nop
+ ac_cv_func_stat_empty_string_bug=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5
+printf "%s\n" "$ac_cv_func_stat_empty_string_bug" >&6; }
+if test $ac_cv_func_stat_empty_string_bug = yes; then
+ case " $LIBOBJS " in
+ *" stat.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS stat.$ac_objext"
+ ;;
+esac
+
+
+printf "%s\n" "#define HAVE_STAT_EMPTY_STRING_BUG 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "atexit" "ac_cv_func_atexit"
+if test "x$ac_cv_func_atexit" = xyes
+then :
+ printf "%s\n" "#define HAVE_ATEXIT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getmntent" "ac_cv_func_getmntent"
+if test "x$ac_cv_func_getmntent" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETMNTENT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset"
+if test "x$ac_cv_func_memset" = xyes
+then :
+ printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes
+then :
+ printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "regcomp" "ac_cv_func_regcomp"
+if test "x$ac_cv_func_regcomp" = xyes
+then :
+ printf "%s\n" "#define HAVE_REGCOMP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "rpmatch" "ac_cv_func_rpmatch"
+if test "x$ac_cv_func_rpmatch" = xyes
+then :
+ printf "%s\n" "#define HAVE_RPMATCH 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
+if test "x$ac_cv_func_setlocale" = xyes
+then :
+ printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket"
+if test "x$ac_cv_func_socket" = xyes
+then :
+ printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp"
+if test "x$ac_cv_func_strcasecmp" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr"
+if test "x$ac_cv_func_strchr" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRCHR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
+if test "x$ac_cv_func_strerror" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strpbrk" "ac_cv_func_strpbrk"
+if test "x$ac_cv_func_strpbrk" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRPBRK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strrchr" "ac_cv_func_strrchr"
+if test "x$ac_cv_func_strrchr" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRRCHR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul"
+if test "x$ac_cv_func_strtoul" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h
+
+fi
+
+
+# Check whether --enable-largefile was given.
+if test ${enable_largefile+y}
+then :
+ enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+printf %s "checking for special C compiler options needed for large files... " >&6; }
+if test ${ac_cv_sys_largefile_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ CC="$CC -n32"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test ${ac_cv_sys_file_offset_bits+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h
+;;
+esac
+rm -rf conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+printf %s "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test ${ac_cv_sys_large_files+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+printf "%s\n" "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h
+;;
+esac
+rm -rf conftest*
+ fi
+fi
+
+
+if test x"$DEJAGNU" = x
+then
+ DEJAGNU="/dev/null"
+fi
+
+
+ac_config_files="$ac_config_files Makefile doc/Makefile icons/Makefile po/Makefile.in man-po/Makefile testsuite/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+printf %s "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5
+printf "%s\n" "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WANT_FUSER_TRUE}" && test -z "${WANT_FUSER_FALSE}"; then
+ as_fn_error $? "conditional \"WANT_FUSER\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WANT_PEEKFD_I386_TRUE}" && test -z "${WANT_PEEKFD_I386_FALSE}"; then
+ as_fn_error $? "conditional \"WANT_PEEKFD_I386\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WANT_PEEKFD_X86_64_TRUE}" && test -z "${WANT_PEEKFD_X86_64_FALSE}"; then
+ as_fn_error $? "conditional \"WANT_PEEKFD_X86_64\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WANT_PEEKFD_PPC_TRUE}" && test -z "${WANT_PEEKFD_PPC_FALSE}"; then
+ as_fn_error $? "conditional \"WANT_PEEKFD_PPC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WANT_PEEKFD_ARM_TRUE}" && test -z "${WANT_PEEKFD_ARM_FALSE}"; then
+ as_fn_error $? "conditional \"WANT_PEEKFD_ARM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WANT_PEEKFD_ARM64_TRUE}" && test -z "${WANT_PEEKFD_ARM64_FALSE}"; then
+ as_fn_error $? "conditional \"WANT_PEEKFD_ARM64\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WANT_PEEKFD_MIPS_TRUE}" && test -z "${WANT_PEEKFD_MIPS_FALSE}"; then
+ as_fn_error $? "conditional \"WANT_PEEKFD_MIPS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WANT_PEEKFD_M68K_TRUE}" && test -z "${WANT_PEEKFD_M68K_FALSE}"; then
+ as_fn_error $? "conditional \"WANT_PEEKFD_M68K\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else $as_nop
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
+as_nl='
+'
+export as_nl
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+
+# The user is always right.
+if ${PATH_SEPARATOR+false} :; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ printf "%s\n" "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else $as_nop
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else $as_nop
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by psmisc $as_me 23.7, which was
+generated by GNU Autoconf 2.71. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config='$ac_cs_config_escaped'
+ac_cs_version="\\
+psmisc config.status 23.7
+configured by $0, generated by GNU Autoconf 2.71,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ printf "%s\n" "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ printf "%s\n" "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ printf "%s\n" "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ printf "%s\n" "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS.
+ OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS"
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "icons/Makefile") CONFIG_FILES="$CONFIG_FILES icons/Makefile" ;;
+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+ "man-po/Makefile") CONFIG_FILES="$CONFIG_FILES man-po/Makefile" ;;
+ "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
+ test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
+ test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ printf "%s\n" "/* $configure_input */" >&1 \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ printf "%s\n" "/* $configure_input */" >&1 \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+printf "%s\n" "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ case $CONFIG_FILES in #(
+ *\'*) :
+ eval set x "$CONFIG_FILES" ;; #(
+ *) :
+ set x $CONFIG_FILES ;; #(
+ *) :
+ ;;
+esac
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$am_mf" : 'X\(//\)[^/]' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$am_mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$am_mf" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { echo "$as_me:$LINENO: cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles" >&5
+ (cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE=\"gmake\" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ { am_dirpart=; unset am_dirpart;}
+ { am_filepart=; unset am_filepart;}
+ { am_mf=; unset am_mf;}
+ { am_rc=; unset am_rc;}
+ rm -f conftest-deps.mk
+}
+ ;;
+ "po-directories":C)
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ gt_tab=`printf '\t'`
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..81c8a0a
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,233 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_PREREQ([2.69])
+AC_CONFIG_MACRO_DIR([m4])
+AC_INIT([psmisc],[m4_esyscmd(misc/git-version-gen .tarball-version)],[],[],[],[https://www.gitlab.com/psmisc/psmisc])
+AM_INIT_AUTOMAKE([foreign 1.11 subdir-objects -Wall -Wno-portability tar-pax no-dist-gzip dist-xz])
+AM_SILENT_RULES([yes])
+AC_CONFIG_SRCDIR([src/comm.h])
+AC_CONFIG_HEADERS([config.h])
+
+dnl Checks for programs.
+AC_USE_SYSTEM_EXTENSIONS(_GNU_SOURCE)
+AC_PROG_CXX
+AC_PROG_LN_S
+AC_PROG_CC
+
+AC_DEFUN([PSMISC_PROG_PO4A], [
+ AC_REQUIRE([AM_NLS])
+ AC_CHECK_PROGS([PO4A], [po4a])
+ AS_IF([test "$USE_NLS" = "yes" && test -n "$PO4A"], [
+ USE_PO4A=yes
+ ], [
+ USE_PO4A=no
+ ])
+ AC_SUBST([USE_PO4A])
+])
+PSMISC_PROG_PO4A
+
+dnl checks for options
+# SELinux support - off by default
+DL_LIB=
+AC_SUBST([WITH_SELINUX])
+AC_ARG_ENABLE([selinux],
+ [AS_HELP_STRING([--enable-selinux], [Enable Security-Enhanced Linux features])],
+ [enable_selinux=$enableval],
+ [enable_selinux="no"])
+if test "$enable_selinux" = "yes"; then
+ AC_DEFINE([WITH_SELINUX], [1], [Use Security-Enhanced Linux features])
+ AC_SEARCH_LIBS([dlopen], [dl], [],
+ [AC_MSG_ERROR([dynamic linking unavailable, circumvent with --disable-selinux])])
+ if test "x$ac_cv_search_dlopen" != "xnone required"; then
+ DL_LIB="$ac_cv_search_dlopen"
+ fi
+fi
+AC_SUBST([DL_LIB])
+
+# AppArmor support - off by default
+DL_LIB=
+AC_SUBST([WITH_AppArmor])
+AC_ARG_ENABLE([apparmor],
+ [AS_HELP_STRING([--enable-apparmor], [Enable AppArmor features])],
+ [enable_apparmor=$enableval],
+ [enable_apparmor="no"])
+if test "$enable_apparmor" = "yes"; then
+ AC_DEFINE([WITH_APPARMOR], [1], [Use AppArmor features])
+ AC_SEARCH_LIBS([dlopen], [dl], [],
+ [AC_MSG_ERROR([dynamic linking unavailable, circumvent with --disable-apparmor])])
+ AC_CHECK_HEADER([sys/apparmor.h], [],
+ [AC_MSG_ERROR([Need AppArmor header files, circumvent with --disable-apparmor])])
+ if test "x$ac_cv_search_dlopen" != "xnone required"; then
+ DL_LIB="$ac_cv_search_dlopen"
+ fi
+fi
+AC_SUBST([DL_LIB])
+
+AC_CHECK_DECLS([SYS_statx],
+ [has_syscall_statx="yes"],
+ [has_syscall_statx="no"],
+ [[#include <sys/syscall.h>]]
+)
+
+# Check for linux specific statx(2) system call
+AC_CHECK_HEADERS([sys/syscall.h])
+AC_CHECK_FUNCS([statx])
+AC_CHECK_DECLS([STATX_TYPE])
+
+AC_SUBST([WITH_STATX])
+AC_ARG_ENABLE([statx],
+ [AS_HELP_STRING([--disable-statx], [Do not use linux specific statx(2) system call as replacement for stat(2), lstat(2), and fstat(2)])],
+ [], [enable_statx="yes"])
+if test "$enable_statx" = "yes"; then
+ AC_DEFINE([WITH_STATX], [1], [Use statx system call])
+ if test "$has_syscall_statx" = "no" && "$have_statx" = "no"; then
+ AC_MSG_ERROR([statx() and SYS_statx not found, use --disable-statx to not use statx])
+ fi
+ fi
+
+# Enable hardened compile and link flags
+AC_ARG_ENABLE([harden_flags],
+ [AS_HELP_STRING([--disable-harden-flags], [disable hardened compilier and linker flags])],
+ [enable_harden_flags=$enableval],
+ [enable_harden_flags="yes"])
+
+dnl ipv4 only option
+AC_SUBST([WITH_IPV6])
+AC_ARG_ENABLE([ipv6],
+ [AS_HELP_STRING([--disable-ipv6], [Disable IPv6 checks (for uClibc)])],
+ [enable_ipv6=$enableval],
+ [enable_ipv6="yes"])
+if test "$enable_ipv6" = "yes"; then
+ AC_DEFINE([WITH_IPV6], [1], [Use IPv6 checks])
+fi
+
+dnl Checks for libraries.
+AC_CHECK_LIB([tinfo], [tgetent], [TERMCAP_LIB=-ltinfo],
+ [ AC_CHECK_LIB([ncurses], [tgetent], [TERMCAP_LIB=-lncurses],
+ [ AC_CHECK_LIB([termcap], [tgetent], [TERMCAP_LIB=-ltermcap],
+ [ AC_MSG_ERROR([Cannot find tinfo, ncurses or termcap libraries])
+ ] )
+ ] )
+ ] )
+AC_SUBST([TERMCAP_LIB])
+
+dnl Checks for header files.
+AC_HEADER_DIRENT
+
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS([arpa/inet.h fcntl.h langinfo.h libintl.h limits.h locale.h mntent.h netdb.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h termios.h unistd.h])
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_CHECK_MEMBERS([struct stat.st_rdev])
+AC_TYPE_UID_T
+
+# Check that harden CFLAGS and LDFLAGS will compile
+AS_IF([test "$enable_harden_flags" = "yes"],
+ HARDEN_CFLAGS="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security"
+ [HARDEN_LDFLAGS="-Wl,-z,relro"]
+ [ AC_MSG_CHECKING([compiler supports harden flags])
+ save_harden_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS $HARDEN_CFLAGS"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,,)],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no]); HARDEN_CFLAGS='']
+ )
+ CFLAGS="$save_harden_cflags"],
+ [HARDEN_CFLAGS=""
+ HARDEN_LDFLAGS=""])
+AC_SUBST([HARDEN_CFLAGS])
+AC_SUBST([HARDEN_LDFLAGS])
+
+dnl Check for language stuff
+AM_GNU_GETTEXT_VERSION([0.21])
+AM_GNU_GETTEXT([external])
+
+dnl Must be after the gettext stuff as it sets build_cpu
+AC_CHECK_MEMBERS([struct user_regs_struct.orig_eax,
+ struct user_regs_struct.eax,
+ struct user_regs_struct.ebx,
+ struct user_regs_struct.ecx,
+ struct user_regs_struct.edx,
+ struct user_regs_struct.orig_rax,
+ struct user_regs_struct.rax,
+ struct user_regs_struct.rdi,
+ struct user_regs_struct.rsi,
+ struct user_regs_struct.rdx], [],[],
+ [#include <bits/types.h>
+ #include <sys/user.h>])
+AC_CHECK_MEMBERS([struct pt_regs.orig_gpr3,
+ struct pt_regs.gpr], [],[], [#include <linux/ptrace.h>])
+AC_CHECK_MEMBERS([struct pt_regs.uregs],[],[], [#include <asm/ptrace.h>])
+AC_CHECK_MEMBERS([struct user_pt_regs.regs],[],[], [#include <asm/ptrace.h>])
+AC_CHECK_MEMBERS([struct pt_regs.regs,
+ struct pt_regs.cp0_status],[],[], [#include <asm/ptrace.h>])
+AC_CHECK_MEMBERS([struct pt_regs.orig_d0,
+ struct pt_regs.d0],[],[], [#include <asm/ptrace.h>])
+
+case ${host_os} in
+ gnu*)
+ want_fuser=no
+ ;;
+ *)
+ want_fuser=yes
+ ;;
+esac
+AM_CONDITIONAL(WANT_FUSER, test $want_fuser = yes)
+
+AM_CONDITIONAL(WANT_PEEKFD_I386,
+ test $ac_cv_member_struct_user_regs_struct_orig_eax = yes &&
+ test $ac_cv_member_struct_user_regs_struct_eax = yes &&
+ test $ac_cv_member_struct_user_regs_struct_ebx = yes &&
+ test $ac_cv_member_struct_user_regs_struct_ecx = yes &&
+ test $ac_cv_member_struct_user_regs_struct_edx = yes )
+AM_CONDITIONAL(WANT_PEEKFD_X86_64,
+ test $ac_cv_member_struct_user_regs_struct_orig_rax = yes &&
+ test $ac_cv_member_struct_user_regs_struct_rax = yes &&
+ test $ac_cv_member_struct_user_regs_struct_rdi = yes &&
+ test $ac_cv_member_struct_user_regs_struct_rsi = yes &&
+ test $ac_cv_member_struct_user_regs_struct_rdx = yes )
+AM_CONDITIONAL(WANT_PEEKFD_PPC,
+ test $ac_cv_member_struct_pt_regs_orig_gpr3 = yes &&
+ test $ac_cv_member_struct_pt_regs_gpr = yes )
+AM_CONDITIONAL(WANT_PEEKFD_ARM,
+ test $ac_cv_member_struct_pt_regs_uregs = yes)
+AM_CONDITIONAL(WANT_PEEKFD_ARM64,
+ test $ac_cv_member_struct_user_pt_regs_regs = yes)
+AM_CONDITIONAL(WANT_PEEKFD_MIPS,
+ test $build_cpu = mipsel &&
+ test $ac_cv_member_struct_pt_regs_regs = yes &&
+ test $ac_cv_member_struct_pt_regs_cp0_status = yes)
+AM_CONDITIONAL(WANT_PEEKFD_M68K,
+ test $ac_cv_member_struct_pt_regs_orig_d0 = yes &&
+ test $ac_cv_member_struct_pt_regs_d0 = yes)
+
+dnl Checks for library functions.
+AC_FUNC_CLOSEDIR_VOID
+AC_FUNC_GETMNTENT
+AC_PROG_GCC_TRADITIONAL
+AC_FUNC_LSTAT
+AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
+AC_FUNC_MALLOC
+AC_FUNC_MEMCMP
+AC_FUNC_REALLOC
+AC_FUNC_STAT
+AC_CHECK_FUNCS([atexit getmntent memset nl_langinfo regcomp rpmatch setlocale socket strcasecmp strchr strdup strerror strpbrk strrchr strtoul])
+
+dnl Checks for Large File System
+AC_SYS_LARGEFILE
+
+if test x"$DEJAGNU" = x
+then
+ DEJAGNU="/dev/null"
+fi
+AC_SUBST(DEJAGNU)
+
+AC_CONFIG_FILES([Makefile
+ doc/Makefile
+ icons/Makefile
+ po/Makefile.in
+ man-po/Makefile
+ testsuite/Makefile])
+AC_OUTPUT
diff --git a/depcomp b/depcomp
new file mode 100755
index 0000000..715e343
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'. Note that this directory component will
+# be either empty or ending with a '/' character. This is deliberate.
+set_dir_from ()
+{
+ case $1 in
+ */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+ *) dir=;;
+ esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+ base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+ echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+ # If the compiler actually managed to produce a dependency file,
+ # post-process it.
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependency.h'.
+ # Do two passes, one to just change these to
+ # $object: dependency.h
+ # and one to simply output
+ # dependency.h:
+ # which is needed to avoid the deleted-header problem.
+ { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+ sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+ } > "$depfile"
+ rm -f "$tmpdepfile"
+ else
+ make_dummy_depfile
+ fi
+}
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say). Also, it might not be
+## supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The second -e expression handles DOS-style file names with drive
+ # letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ aix_post_process_depfile
+ ;;
+
+tcc)
+ # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+ # FIXME: That version still under development at the moment of writing.
+ # Make that this statement remains true also for stable, released
+ # versions.
+ # It will wrap lines (doesn't matter whether long or short) with a
+ # trailing '\', as in:
+ #
+ # foo.o : \
+ # foo.c \
+ # foo.h \
+ #
+ # It will put a trailing '\' even on the last line, and will use leading
+ # spaces rather than leading tabs (at least since its commit 0394caf7
+ # "Emit spaces for -MD").
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+ # We have to change lines of the first kind to '$object: \'.
+ sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+ # And for each line of the second kind, we have to emit a 'dep.h:'
+ # dummy dependency, to avoid the deleted-header problem.
+ sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file. A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+ # Portland's C compiler understands '-MD'.
+ # Will always output deps to 'file.d' where file is the root name of the
+ # source file under compilation, even if file resides in a subdirectory.
+ # The object file name does not affect the name of the '.d' file.
+ # pgcc 10.2 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\' :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ set_dir_from "$object"
+ # Use the source, not the object, to determine the base name, since
+ # that's sadly what pgcc will do too.
+ set_base_from "$source"
+ tmpdepfile=$base.d
+
+ # For projects that build the same source file twice into different object
+ # files, the pgcc approach of using the *source* file root name can cause
+ # problems in parallel builds. Use a locking strategy to avoid stomping on
+ # the same $tmpdepfile.
+ lockdir=$base.d-lock
+ trap "
+ echo '$0: caught signal, cleaning up...' >&2
+ rmdir '$lockdir'
+ exit 1
+ " 1 2 13 15
+ numtries=100
+ i=$numtries
+ while test $i -gt 0; do
+ # mkdir is a portable test-and-set.
+ if mkdir "$lockdir" 2>/dev/null; then
+ # This process acquired the lock.
+ "$@" -MD
+ stat=$?
+ # Release the lock.
+ rmdir "$lockdir"
+ break
+ else
+ # If the lock is being held by a different process, wait
+ # until the winning process is done or we timeout.
+ while test -d "$lockdir" && test $i -gt 0; do
+ sleep 1
+ i=`expr $i - 1`
+ done
+ fi
+ i=`expr $i - 1`
+ done
+ trap - 1 2 13 15
+ if test $i -le 0; then
+ echo "$0: failed to acquire lock after $numtries attempts" >&2
+ echo "$0: check lockdir '$lockdir'" >&2
+ exit 1
+ fi
+
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ set_dir_from "$object"
+ set_base_from "$object"
+
+ if test "$libtool" = yes; then
+ # Libtool generates 2 separate objects for the 2 libraries. These
+ # two compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir$base.o.d # libtool 1.5
+ tmpdepfile2=$dir.libs/$base.o.d # Likewise.
+ tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ # Same post-processing that is required for AIX mode.
+ aix_post_process_depfile
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this sed invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process the last invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed '1,2d' "$tmpdepfile" \
+ | tr ' ' "$nl" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E \
+ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ | sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..a4783e5
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,11 @@
+
+man_MANS = killall.1 peekfd.1 prtstat.1 pslog.1 pstree.1
+EXTRA_MANS =
+
+if WANT_FUSER
+ man_MANS += fuser.1
+else
+ EXTRA_MANS += fuser.1
+endif
+
+EXTRA_DIST = $(man_MANS) $(EXTRA_MANS)
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..e6a6904
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,535 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@WANT_FUSER_TRUE@am__append_1 = fuser.1
+@WANT_FUSER_FALSE@am__append_2 = fuser.1
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEJAGNU = @DEJAGNU@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HARDEN_CFLAGS = @HARDEN_CFLAGS@
+HARDEN_LDFLAGS = @HARDEN_LDFLAGS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PO4A = @PO4A@
+POSUB = @POSUB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMCAP_LIB = @TERMCAP_LIB@
+USE_NLS = @USE_NLS@
+USE_PO4A = @USE_PO4A@
+VERSION = @VERSION@
+WITH_AppArmor = @WITH_AppArmor@
+WITH_IPV6 = @WITH_IPV6@
+WITH_SELINUX = @WITH_SELINUX@
+WITH_STATX = @WITH_STATX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = killall.1 peekfd.1 prtstat.1 pslog.1 pstree.1 \
+ $(am__append_1)
+EXTRA_MANS = $(am__append_2)
+EXTRA_DIST = $(man_MANS) $(EXTRA_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign doc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic cscopelist-am \
+ ctags-am distclean distclean-generic distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-man1 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags-am uninstall uninstall-am uninstall-man \
+ uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/fuser.1 b/doc/fuser.1
new file mode 100644
index 0000000..37191c0
--- /dev/null
+++ b/doc/fuser.1
@@ -0,0 +1,310 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.TH FUSER 1 "2022-11-02" "psmisc" "User Commands"
+.SH NAME
+fuser \- identify processes using files or sockets
+.SH SYNOPSIS
+.ad l
+.B fuser
+.RB [ \-fuv ]
+.RB [ \-a | \-s ]
+.RB [ \-4 | \-6 ]
+.RB [ \-c | \-m | \-n
+.IR space ]
+.RB [ \ \-k
+.RB [ \-i ]
+.RB [ \-M ]
+.RB [ \-w ]
+.RB [ \-\c
+.IR SIGNAL ]
+]
+.IR name " ..."
+.br
+.B fuser \-l
+.br
+.B fuser \-V
+.ad b
+.SH DESCRIPTION
+.B fuser
+displays the PIDs of processes using the specified files or file
+systems. In the default display mode, each file name is followed by a
+letter denoting the type of access:
+.PP
+.RS
+.PD 0
+.TP
+.B c
+current directory.
+.TP
+.B e
+executable being run.
+.TP
+.B f
+open file.
+.B f
+is omitted in default display mode.
+.TP
+.B F
+open file for writing.
+.B F
+is omitted in default display mode.
+.TP
+.B r
+root directory.
+.TP
+.B m
+mmap'ed file or shared library.
+.TP
+.B .
+Placeholder, omitted in default display mode.
+.PD
+.RE
+.LP
+.B fuser
+returns a non-zero return code if none of the specified files is
+accessed or in case of a fatal error. If at least one access has been
+found,
+.B fuser
+returns zero.
+.PP
+In order to look up processes using TCP and UDP sockets, the
+corresponding name space has to be selected with the
+.B \-n
+option. By default
+.B fuser
+will look in both IPv6 and IPv4 sockets. To change the default
+behavior, use the
+.B \-4
+and
+.B \-6
+options. The socket(s) can be specified by the local and remote port,
+and the remote address. All fields are optional, but commas in front
+of missing fields must be present:
+.PP
+.RI [ lcl_port ][,[ rmt_host ][,[ rmt_port ]]]
+.PP
+Either symbolic or numeric values can be used for IP addresses and port
+numbers.
+.PP
+.B fuser
+outputs only the PIDs to stdout, everything else is sent to stderr.
+.SH OPTIONS
+.TP
+.BR \-a ", " \-\-all
+Show all files specified on the command line. By default, only files
+that are accessed by at least one process are shown.
+.TP
+.B \-c
+Same as \fB\-m\fR option, used for POSIX compatibility.
+.TP
+.B \-f
+Silently ignored, used for POSIX compatibility.
+.TP
+.BR \-k ", "\-\-kill
+Kill processes accessing the file. Unless changed with
+.BI \- SIGNAL\/\c
+, SIGKILL is sent.
+An
+.B fuser
+process never kills itself, but may kill other
+.B fuser
+processes. The effective user ID of the process executing
+.B fuser
+is set to its real user ID before attempting to kill.
+.TP
+.BR \-i ", " \-\-interactive
+Ask the user for confirmation before killing a process.
+This option is
+silently ignored if
+.B \-k
+is not present too.
+.TP
+.BR \-I ", " \-\-inode
+For the name space
+.B file
+let all comparisons be based on the inodes of the specified file(s)
+and never on the file names even on network based file systems.
+.TP
+.BR \-l ", " \-\-list\-signals
+List all known signal names.
+.TP
+.BI -m " NAME\fR, " "\-\-mount " NAME
+.I NAME
+specifies a file on a mounted file system or a block device that is
+mounted. All processes accessing files on that file system are listed.
+If a directory is specified, it is automatically changed to
+.IR NAME /
+to use any file system that might be mounted on that directory.
+.TP
+.BR \-M ", " \-\-ismountpoint
+Request will be fulfilled only if
+.I NAME
+specifies a mountpoint. This is an invaluable seat belt which prevents
+you from killing the machine if
+.I NAME
+happens to not be a filesystem.
+.TP
+.B \-w
+Kill only processes which have write access. This option is silently
+ignored if
+.B \-k
+is not present too.
+.TP
+.BI \-n " NAMESPACE\fR, " "\-\-namespace " NAMESPACE
+Select a different name space. The name spaces
+.B file
+(file names, the default),
+.B udp
+(local UDP ports), and
+.B tcp
+(local TCP ports) are supported. For ports, either the port number or
+the symbolic name can be specified. If there is no ambiguity, the
+shortcut notation
+.IB name / space
+(e.g.,
+.IB 80 / tcp \fR)
+can be used.
+.TP
+.BR \-s ", " \-\-silent
+Silent operation.
+.B \-u
+and
+.B \-v
+are ignored in this mode.
+.B \-a
+must not be used with
+.BR \-s .
+.TP
+.BI \- SIGNAL
+Use the specified signal instead of SIGKILL when killing processes.
+Signals can be specified either by name (e.g.,
+.BR \-HUP )
+or by number (e.g.,
+.BR \-1 ).
+This option is silently ignored if the
+.B \-k
+option is not used.
+.TP
+.BR \-u ", " \-\-user
+Append the user name of the process owner to each PID.
+.TP
+.BR \-v ", " \-\-verbose
+Verbose mode. Processes are shown in a
+.BR ps -like
+style. The fields PID, USER and COMMAND are similar to
+.BR ps .
+ACCESS shows how the process accesses the file. Verbose mode will also
+show when a particular file is being accessed as a mount point, knfs
+export or swap file. In this case
+.B kernel
+is shown instead of the PID.
+.TP
+.BR \-V ", " \-\-version
+Display version information.
+.TP
+.BR \-4 ", " \-\-ipv4
+Search only for IPv4 sockets. This option must not be used with the
+.B \-6
+option and only has an effect with the tcp and udp namespaces.
+.TP
+.BR \-6 ", " \-\-ipv6
+Search only for IPv6 sockets. This option must not be used with the
+.B \-4
+option and only has an effect with the tcp and udp namespaces.
+.SH FILES
+.TP
+/proc
+location of the proc file system
+.SH EXAMPLES
+.TP
+.B fuser \-km /home
+kills all processes accessing the file system /home in any way.
+.TP
+.BI "if fuser \-s /dev/ttyS1; then :; else " command "; fi"
+invokes
+.I command
+if no other process is using /dev/ttyS1.
+.TP
+.B fuser telnet/tcp
+shows all processes at the (local) TELNET port.
+.SH RESTRICTIONS
+Processes accessing the same file or file system several times in the
+same way are only shown once.
+.PP
+If the same object is specified several times on the command line, some
+of those entries may be ignored.
+.PP
+.B fuser
+may only be able to gather partial information unless run with
+privileges. As a consequence, files opened by processes belonging to
+other users may not be listed and executables may be classified as
+mapped only.
+.PP
+.B fuser
+cannot report on any processes that it doesn't have permission to look
+at the file descriptor table for. The most common time this problem
+occurs is when looking for TCP or UDP sockets when running
+.B fuser
+as a non-root user. In this case
+.B fuser
+will report no access.
+.PP
+Installing
+.B fuser
+SUID root will avoid problems associated with partial information, but
+may be undesirable for security and privacy reasons.
+.PP
+.B udp
+and
+.B tcp
+name spaces, and UNIX domain sockets can't be searched with kernels
+older than 1.3.78.
+.PP
+Accesses by the kernel are only shown with the
+.B \-v
+option.
+.PP
+The
+.B \-k
+option only works on processes. If the user is the kernel,
+.B fuser
+will print an advice, but take no action beyond that.
+.PP
+.B fuser
+will not see block devices mounted by processes in a different mount namespace.
+This is due to the device ID shown in the process' file descriptor table being
+from the process namespace, not fuser's; meaning it won't match.
+.SH BUGS
+.PP
+.B fuser \-m /dev/sgX
+will show (or kill with the \fB\-k\fR flag) all processes,
+even if you don't have that device configured. There may be other
+devices it does this for too.
+.PP
+The mount \fB\-m\fR option will match any file within the same device as the
+specified file, use the \fB\-M\fR option as well if you mean to specify only
+the mount point.
+.PP
+.B fuser
+will not match mapped files, such as a process' shared libraries if they are
+on a
+.BR btrfs (5)
+filesystem due to the device IDs being different for
+.BR stat (2)
+and \fI/proc/<PID>/maps\fR.
+.SH "SEE ALSO"
+.BR kill (1),
+.BR killall (1),
+.BR stat (2),
+.BR btrfs (5),
+.BR lsof (8),
+.BR mount_namespaces (7),
+.BR pkill (1),
+.BR ps (1),
+.BR kill (2).
diff --git a/doc/killall.1 b/doc/killall.1
new file mode 100644
index 0000000..3414066
--- /dev/null
+++ b/doc/killall.1
@@ -0,0 +1,178 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.TH KILLALL 1 "2023-06-17" "psmisc" "User Commands"
+.SH NAME
+killall \- kill processes by name
+.SH SYNOPSIS
+.ad l
+.B killall
+.RB [ \-Z , \ \-\-context
+.IR pattern ]
+.RB [ \-e , \ \-\-exact ]
+.RB [ \-g , \ \-\-process\-group ]
+.RB [ \-i , \ \-\-interactive ]
+.RB [ \-n , \ \-\-ns
+.IR PID ]
+.RB [ \-o , \ \-\-older\-than
+.IR TIME ]
+.RB [ \-q , \ \-\-quiet ]
+.RB [ \-r , \ \-\-regexp ]
+.RB [ \-s , \ \-\-signal
+.IR SIGNAL ,\ \fB\- \fISIGNAL\fR ]
+.RB [ \-u , \ \-\-user
+.IR user ]
+.RB [ \-v , \ \-\-verbose ]
+.RB [ \-w , \ \-\-wait ]
+.RB [ \-y , \ \-\-younger\-than
+.IR TIME ]
+.RB [ \-I , \ \-\-ignore-case ]
+.RB [ \-V , \ \-\-version ]
+.RB [ \-\- ]
+.IR name " ..."
+.br
+.B killall
+.BR \-l ", " \-\-list
+.br
+.B killall
+.BR \-V , \ \-\-version
+.ad b
+.SH DESCRIPTION
+.B killall
+sends a signal to all processes running any of the specified commands.
+If no signal name is specified, SIGTERM is sent.
+.PP
+Signals can be specified either by name (e.g.\&
+.B \-HUP
+or
+.BR \-SIGHUP )
+or by number (e.g.\&
+.BR \-1 )
+or by option
+.BR \-s .
+.PP
+If the command name is not regular expression (option
+.BR \-r )
+and contains a slash
+.RB ( / ),
+processes executing that particular file will be selected for killing,
+independent of their name.
+.PP
+.B killall
+returns a zero return code if at least one process has been killed for
+each listed command, or no commands were listed and at least one
+process matched the \fB\-u\fR and \fB\-Z\fR search criteria.
+.B killall
+returns non-zero otherwise.
+.PP
+A
+.B killall
+process never kills itself (but may kill other
+.B killall
+processes).
+.SH OPTIONS
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+Require an exact match for very long names. If a command name is
+longer than 15 characters, the full name may be unavailable (i.e. it
+is swapped out). In this case,
+.B killall
+will kill everything that matches within the first 15 characters. With
+.BR \-e ,
+such entries are skipped.
+.B killall
+prints a message for each skipped entry
+if
+.B \-v
+is specified in addition to
+.BR \-e .
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+Do case insensitive process name match.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+Kill the process group to which the process belongs. The kill signal
+is only sent once per group, even if multiple processes belonging to
+the same process group were found.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+Interactively ask for confirmation before killing.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+List all known signal names.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+Match against the PID namespace of the given PID. The default is to match
+against all namespaces.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+Match only processes that are older (started before) the time
+specified. The time is specified as a float then a unit. The units
+are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, months and
+years respectively.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+Do not complain if no processes were killed.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+Interpret process name pattern as a POSIX extended regular expression, per
+.BR regex (3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fISIGNAL\fP"
+Send this signal instead of SIGTERM.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+Kill only processes the specified user owns. Command names are
+optional.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+Report if the signal was successfully sent.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+Display version information.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+Wait for all killed processes to die.
+.B killall
+checks once per second if any of the killed processes still exist and
+only returns if none are left. Note that
+.B killall
+may wait forever if the signal was ignored, had no effect, or if the
+process stays in zombie state.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+Match only processes that are younger (started after) the time
+specified. The time is specified as a float then a unit. The units
+are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, Months and
+years respectively.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+Specify security context: kill only processes having
+security context that match with given extended regular expression
+pattern. Must precede other arguments on the command line. Command
+names are optional.
+.SH FILES
+.TP
+/proc
+location of the proc file system
+.SH "KNOWN BUGS"
+Killing by file only works for executables that are kept open during
+execution, i.e. impure executables can't be killed this way.
+.PP
+Be warned that typing
+.B killall
+.I name
+may not have the desired effect on non-Linux systems, especially when
+done by a privileged user.
+.PP
+.B killall \-w
+doesn't detect if a process disappears and is replaced by a new process
+with the same PID between scans.
+.PP
+If processes change their name,
+.B killall
+may not be able to match them correctly.
+.PP
+.B killall
+has a limit of names that can be specified on the command line. This
+figure is the size of an unsigned long integer multiplied by 8. For most 32
+bit systems the limit is 32 and similarly for a 64 bit system the limit
+is usually 64.
+.SH "SEE ALSO"
+.BR kill (1),
+.BR fuser (1),
+.BR pgrep (1),
+.BR pidof (1),
+.BR pkill (1),
+.BR ps (1),
+.BR kill (2),
+.BR regex (3).
diff --git a/doc/peekfd.1 b/doc/peekfd.1
new file mode 100644
index 0000000..f14159f
--- /dev/null
+++ b/doc/peekfd.1
@@ -0,0 +1,64 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.TH PEEKFD 1 "2021-12-01" "psmisc" "User Commands"
+.SH NAME
+peekfd \- peek at file descriptors of running processes
+.SH SYNOPSIS
+.B peekfd
+.RB [ \-8 , \-\-eight\-bit\-clean ]
+.RB [ \-n , \-\-no\-headers ]
+.RB [ \-c , \-\-follow ]
+.RB [ \-d , \-\-duplicates\-removed ]
+.RB [ \-V , \-\-version ]
+.RB [ \-h , \-\-help ]
+.I pid
+.RI [ fd ]
+.RI [ fd "] ..."
+.SH DESCRIPTION
+.B peekfd
+attaches to a running process and intercepts all reads and writes to
+file descriptors. You can specify the desired file descriptor numbers
+or dump all of them.
+.SH OPTIONS
+.IP -8
+Do no post-processing on the bytes being read or written.
+.IP -n
+Do not display headers indicating the source of the bytes dumped.
+.IP -c
+Also dump the requested file descriptor activity in any new child
+processes that are created.
+.IP -d
+Remove duplicate read/writes from the output. If you're looking at a
+tty with echo, you might want this.
+.IP -v
+Display a version string.
+.IP -h
+Display a help message.
+.SH FILES
+.BI /proc/ * /fd
+.RS
+Not used but useful for the user to look at to get good file descriptor
+numbers.
+.SH ENVIRONMENT
+None.
+.SH DIAGNOSTICS
+The following diagnostics may be issued on stderr:
+.TP
+.BI "Error attaching to pid " <PID>
+An unknown error occurred while attempted to attach to a process, you
+may need to be root.
+.SH BUGS
+Probably lots. Don't be surprised if the process you are monitoring
+dies.
+.SH AUTHOR
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "SEE ALSO"
+.BR ttysnoop (8)
diff --git a/doc/prtstat.1 b/doc/prtstat.1
new file mode 100644
index 0000000..3a7aed6
--- /dev/null
+++ b/doc/prtstat.1
@@ -0,0 +1,40 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.TH PRTSTAT 1 "2020-09-09" "psmisc" "User Commands"
+.SH NAME
+prtstat \- print statistics of a process
+.SH SYNOPSIS
+.ad l
+.B prtstat
+.RB [ \-r | \-\-raw ]
+.I pid
+.br
+.B prtstat
+.BR \-V | \-\-version
+.ad b
+.SH DESCRIPTION
+.B prtstat
+prints the statistics of the specified process. This information comes
+from the
+.BI /proc/ pid /stat
+file.
+.SH OPTIONS
+.TP
+.BR \-r , \ \-\-raw
+Print the information in raw format.
+.TP
+.BR \-V , \ \-\-version
+Show the version information for
+.BR prtstat .
+.SH FILES
+.TP
+.BI /proc/ pid /stat
+source of the information
+.B prtstat
+uses.
diff --git a/doc/pslog.1 b/doc/pslog.1
new file mode 100644
index 0000000..5b6ec5a
--- /dev/null
+++ b/doc/pslog.1
@@ -0,0 +1,40 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.TH PSLOG 1 "2020-09-09"Linux" "Linux User's Manual"
+.SH NAME
+pslog \- report current logs path of a process
+.SH SYNOPSIS
+.ad l
+.B pslog
+.IR pid " \&...\&"
+.br
+.B pslog \-V
+.ad b
+.SH DESCRIPTION
+The
+.B pslog
+command reports the current working logs of a process.
+.SH OPTIONS
+.TP
+.B \-V
+Display version information.
+.SH "SEE ALSO"
+.BR pgrep (1),
+.BR ps (1),
+.BR pwdx (1).
+.SH AUTHOR
+Vito Mule\(cq
+.MT mulevito@gmail.com
+.ME
+wrote
+.B pslog
+in 2015. Please send bug reports to
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/doc/pstree.1 b/doc/pstree.1
new file mode 100644
index 0000000..8209cf5
--- /dev/null
+++ b/doc/pstree.1
@@ -0,0 +1,178 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.TH PSTREE 1 "2021-06-21" "psmisc" "User Commands"
+.SH NAME
+pstree \- display a tree of processes
+.SH SYNOPSIS
+.ad l
+.B pstree
+.RB [ \-a , \ \-\-arguments ]
+.RB [ \-c , \ \-\-compact\-not ]
+.RB [ \-C , \ \-\-color\ \fIattr\fB ]
+.RB [ \-g , \ \-\-show\-pgids ]
+.RB [ \-h , \ \-\-highlight\-all , \ \-H \fI\ pid\fB \fR, \fB\ \-\-highlight\-pid\ \fIpid\fB \fR]
+.RB [ \-l , \ \-\-long ]
+.RB [ \-n , \ \-\-numeric\-sort ]
+.RB [ \-N , \ \-\-ns\-sort\ \fIns\fB ]
+.RB [ \-p , \ \-\-show\-pids ]
+.RB [ \-s , \ \-\-show\-parents ]
+.RB [ \-S , \ \-\-ns-changes ]
+.RB [ \-t , \ \-\-thread-names ]
+.RB [ \-T , \ \-\-hide-threads ]
+.RB [ \-u , \ \-\-uid\-changes ]
+.RB [ \-Z , \ \-\-security\-context ]
+.RB [ \-A , \ \-\-ascii , \ \-G , \ \-\-vt100 , \ \-U , \ \-\-unicode ]
+.RB [ \fIpid\fB , \ \fIuser\fR]
+.br
+.B pstree
+.BR \-V , \ \-\-version
+.ad b
+.SH DESCRIPTION
+.B pstree
+shows running processes as a tree. The tree is rooted at either
+.I pid
+or
+.B init
+if
+.I pid
+is omitted. If a user name is specified, all process trees rooted at
+processes owned by that user are shown.
+.PP
+.B pstree
+visually merges identical branches by putting them in square brackets
+and prefixing them with the repetition count, e.g.
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+becomes
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+Child threads of a process are found under the parent process and are
+shown with the process name in curly braces, e.g.
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+If
+.B pstree
+is called as
+.B pstree.x11
+then it will prompt the user at the end of the line to press return and
+will not return until that has happened. This is useful for when
+.B pstree
+is run in a xterminal.
+.PP
+Certain kernel or mount parameters, such as the \fIhidepid\fR option for procfs,
+will hide information for some processes. In these situations
+.B pstree
+will attempt to build the tree without this information, showing process
+names as question marks.
+
+.SH OPTIONS
+.IP \fB\-a\fP
+Show command line arguments. If the command line of a process is
+swapped out, that process is shown in parentheses.
+.B \-a
+implicitly disables compaction for processes but not threads.
+.IP \fB\-A\fP
+Use ASCII characters to draw the tree.
+.IP \fB\-c\fP
+Disable compaction of identical subtrees. By default, subtrees are
+compacted whenever possible.
+.IP \fB\-C\fP
+Color the process name by given attribute. Currently \fBpstree\fR
+only accepts the value \fBage\fR which colors by process age.
+Processes newer than 60 seconds are green,
+newer than an hour yellow and the remaining red.
+.IP \fB\-g\fP
+Show PGIDs. Process Group IDs are shown as decimal numbers in
+parentheses after each process name.
+If both PIDs and PGIDs are displayed then PIDs are shown first.
+.IP \fB\-G\fP
+Use VT100 line drawing characters.
+.IP \fB\-h\fP
+Highlight the current process and its ancestors. This is a no-op if
+the terminal doesn't support highlighting or if neither the current
+process nor any of its ancestors are in the subtree being shown.
+.IP \fB\-H\fP
+Like
+.BR \-h ,
+but highlight the specified process instead. Unlike with
+.BR \-h ,
+.B pstree
+fails when using
+.B \-H
+if highlighting is not
+available.
+.IP \fB\-l\fP
+Display long lines. By default, lines are truncated to either the COLUMNS
+environment variable or the display width. If neither of these methods work,
+the default of 132 columns is used.
+.IP \fB\-n\fP
+Sort processes with the same parent by PID instead of by name.
+(Numeric sort.)
+.IP \fB\-N\fP
+Show individual trees for each namespace of the type specified. The
+available types are:
+.IR ipc ", " mnt ", " net ", " pid ", " time ", " user ", " uts .
+Regular users don't
+have access to other users' processes information, so the output will be
+limited.
+.IP \fB\-p\fP
+Show PIDs. PIDs are shown as decimal numbers in parentheses after each
+process name.
+.B \-p
+implicitly disables compaction.
+.IP \fB\-s\fP
+Show parent processes of the specified process.
+.IP \fB\-S\fP
+Show namespaces transitions. Like \fB\-N\fR, the output is limited when running
+as a regular user.
+.IP \fB\-t\fP
+Show full names for threads when available.
+.IP \fB\-T\fP
+Hide threads and only show processes.
+.IP \fB\-u\fP
+Show uid transitions. Whenever the uid of a process differs from the
+uid of its parent, the new uid is shown in parentheses after the
+process name.
+.IP \fB\-U\fP
+Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and
+above, UTF-8 mode is entered on the console with
+.B echo \-e '\\033%8'
+and left with
+.BR "echo \-e '\\033%@'" .
+.IP \fB\-V\fP
+Display version information.
+.IP \fB\-Z\fP
+Show the current security attributes of the process. For SELinux systems this
+will be the security context.
+.SH FILES
+.TP
+/proc
+location of the proc file system
+.SH BUGS
+Some character sets may be incompatible with the VT100 characters.
+.SH "SEE ALSO"
+.BR ps (1),
+.BR top (1),
+.BR proc (5).
+.\"{{{}}}
diff --git a/icons/Makefile.am b/icons/Makefile.am
new file mode 100644
index 0000000..b131f56
--- /dev/null
+++ b/icons/Makefile.am
@@ -0,0 +1,2 @@
+
+EXTRA_DIST = psmisc16.gif psmisc32.gif pstree16.xpm pstree32.xpm
diff --git a/icons/Makefile.in b/icons/Makefile.in
new file mode 100644
index 0000000..e392052
--- /dev/null
+++ b/icons/Makefile.in
@@ -0,0 +1,450 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = icons
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEJAGNU = @DEJAGNU@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HARDEN_CFLAGS = @HARDEN_CFLAGS@
+HARDEN_LDFLAGS = @HARDEN_LDFLAGS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PO4A = @PO4A@
+POSUB = @POSUB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMCAP_LIB = @TERMCAP_LIB@
+USE_NLS = @USE_NLS@
+USE_PO4A = @USE_PO4A@
+VERSION = @VERSION@
+WITH_AppArmor = @WITH_AppArmor@
+WITH_IPV6 = @WITH_IPV6@
+WITH_SELINUX = @WITH_SELINUX@
+WITH_STATX = @WITH_STATX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = psmisc16.gif psmisc32.gif pstree16.xpm pstree32.xpm
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign icons/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic cscopelist-am \
+ ctags-am distclean distclean-generic distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/icons/psmisc16.gif b/icons/psmisc16.gif
new file mode 100644
index 0000000..2143306
--- /dev/null
+++ b/icons/psmisc16.gif
Binary files differ
diff --git a/icons/psmisc32.gif b/icons/psmisc32.gif
new file mode 100644
index 0000000..567041d
--- /dev/null
+++ b/icons/psmisc32.gif
Binary files differ
diff --git a/icons/pstree16.xpm b/icons/pstree16.xpm
new file mode 100644
index 0000000..4f7e412
--- /dev/null
+++ b/icons/pstree16.xpm
@@ -0,0 +1,50 @@
+/* XPM */
+static char * icon_16x16_xpm[] = {
+"16 16 31 1",
+" c None",
+". c #4E1C0D",
+"+ c #A1CDA4",
+"@ c #73F91C",
+"# c #D4880C",
+"$ c #8D320A",
+"% c #DE8F69",
+"& c #67FC03",
+"* c #AA6D53",
+"= c #99F56C",
+"- c #AA9177",
+"; c #AA4509",
+"> c #6CF10A",
+", c #CB7502",
+"' c #3B7529",
+") c #D06938",
+"! c #A5610F",
+"~ c #86D83B",
+"{ c #CC8346",
+"] c #B97428",
+"^ c #864909",
+"/ c #7FF432",
+"( c #C65707",
+"_ c #709081",
+": c #BD300E",
+"< c #68FC04",
+"[ c #A44C36",
+"} c #757408",
+"| c #60E804",
+"1 c #927136",
+"2 c #6D473C",
+" ",
+" ",
+" ,,, _ ",
+" ,#%{,): ",
+" ###,]!({ ",
+" %#{#,*;(:) ",
+" ##{]][^]$$; ",
+" ,,{]#{());$:$1 ",
+" {,*:!^22:^%)$- ",
+" {)$-)^;:!$2.%1 ",
+" !(2._[!$$.*((+ ",
+" {[*1}$..$!- ",
+" ^. ",
+" .' ",
+" _'.'' ",
+" "};
diff --git a/icons/pstree32.xpm b/icons/pstree32.xpm
new file mode 100644
index 0000000..ed79a82
--- /dev/null
+++ b/icons/pstree32.xpm
@@ -0,0 +1,66 @@
+/* XPM */
+static char * icon_32x32_xpm[] = {
+"32 32 31 1",
+" c None",
+". c #4E1C0D",
+"+ c #A1CDA4",
+"@ c #73F91C",
+"# c #D4880C",
+"$ c #8D320A",
+"% c #DE8F69",
+"& c #67FC03",
+"* c #AA6D53",
+"= c #99F56C",
+"- c #AA9177",
+"; c #AA4509",
+"> c #6CF10A",
+", c #CB7502",
+"' c #3B7529",
+") c #D06938",
+"! c #A5610F",
+"~ c #86D83B",
+"{ c #CC8346",
+"] c #B97428",
+"^ c #864909",
+"/ c #7FF432",
+"( c #C65707",
+"_ c #709081",
+": c #BD300E",
+"< c #68FC04",
+"[ c #A44C36",
+"} c #757408",
+"| c #60E804",
+"1 c #927136",
+"2 c #6D473C",
+" ",
+" ",
+" ",
+" ",
+" ! - - ",
+" ,(,,,) _ ",
+" ],{#{,,,) ]:1 ",
+" ,###%{{#,()(:: ",
+" ###{###],,,(($1 ",
+" ######,]]]!](;{ 1 ",
+" %%##{{#,(;)*;;([[:_ ",
+" %%%##{###,)*;;;(;::)- ",
+" %%###%){,)))$^!);;:$;: ",
+" %####{{]{]*[$^*];$$$;;$ ",
+" -]%)####,,!!!{1!]];:;^;;$:{ ",
+" -,,,({]]]##{,()){);;;$$:;$;1 ",
+" +{,,,!,]*]!!]])(;;;)$22:*^[+ ",
+" {,,!**:$!1^.2-2[:!^[%{):$[- ",
+" {))$*--[[1.$.[;!;^$[[$$.[$1 ",
+" {%)[$1-))[^[;;:;!:$22..*%11 ",
+" {#)[{-;$22$!$;(;;;$[_22[::-+ ",
+" #!(((2$.__.[$!!$$$$.$*)(:({+ ",
+" }^*;$![.[!$!$$2...$::(;^}}1 ",
+" #{_[[*21#}$$....^$$!2- ",
+" },:11} }2..2+ __ _ ",
+" ^.. ",
+" }^^} ",
+" '..' ",
+" '.'''' ",
+" _ ''.''''' + ",
+" +++___''''_+++_+++ ",
+" "};
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..ec298b5
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,541 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2020-11-14.01; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab=' '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+# Create dirs (including intermediate dirs) using mode 755.
+# This is like GNU 'install' as of coreutils 8.32 (2020).
+mkdir_umask=22
+
+backupsuffix=
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -p pass -p to $cpprog.
+ -s $stripprog installed files.
+ -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+
+By default, rm is invoked with -f; when overridden with RMPROG,
+it's up to you to specify -f if you want it.
+
+If -S is not specified, no backups are attempted.
+
+Email bug reports to bug-automake@gnu.org.
+Automake home page: https://www.gnu.org/software/automake/
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -p) cpprog="$cpprog -p";;
+
+ -s) stripcmd=$stripprog;;
+
+ -S) backupsuffix="$2"
+ shift;;
+
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) is_target_a_directory=never;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ # Don't chown directories that already exist.
+ if test $dstdir_status = 0; then
+ chowncmd=""
+ fi
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename.
+ if test -d "$dst"; then
+ if test "$is_target_a_directory" = never; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dstbase=`basename "$src"`
+ case $dst in
+ */) dst=$dst$dstbase;;
+ *) dst=$dst/$dstbase;;
+ esac
+ dstdir_status=0
+ else
+ dstdir=`dirname "$dst"`
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ case $dstdir in
+ */) dstdirslash=$dstdir;;
+ *) dstdirslash=$dstdir/;;
+ esac
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ # The $RANDOM variable is not portable (e.g., dash). Use it
+ # here however when possible just to lower collision chance.
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+ trap '
+ ret=$?
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
+ exit $ret
+ ' 0
+
+ # Because "mkdir -p" follows existing symlinks and we likely work
+ # directly in world-writeable /tmp, make sure that the '$tmpdir'
+ # directory is successfully created first before we actually test
+ # 'mkdir -p'.
+ if (umask $mkdir_umask &&
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+ fi
+ trap '' 0;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ set -f
+ set fnord $dstdir
+ shift
+ set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=${dstdirslash}_inst.$$_
+ rmtmp=${dstdirslash}_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask &&
+ { test -z "$stripcmd" || {
+ # Create $dsttmp read-write so that cp doesn't create it read-only,
+ # which would cause strip to fail.
+ if test -z "$doit"; then
+ : >"$dsttmp" # No need to fork-exec 'touch'.
+ else
+ $doit touch "$dsttmp"
+ fi
+ }
+ } &&
+ $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+ set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ set +f &&
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # If $backupsuffix is set, and the file being installed
+ # already exists, attempt a backup. Don't worry if it fails,
+ # e.g., if mv doesn't support -f.
+ if test -n "$backupsuffix" && test -f "$dst"; then
+ $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
+ fi
+
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644
index 0000000..4f25a27
--- /dev/null
+++ b/m4/gettext.m4
@@ -0,0 +1,386 @@
+# gettext.m4 serial 71 (gettext-0.20.2)
+dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL must be one of 'external', 'use-libtool'.
+dnl INTLSYMBOL should be 'external' for packages other than GNU gettext, and
+dnl 'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED).
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value '$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])
+ ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+ [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported.
+])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external], [no], [yes]))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH([included-gettext],
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+ ]])],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+ ]])],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+ ]])],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE([ENABLE_NLS], [1],
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE([HAVE_GETTEXT], [1],
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE([HAVE_DCGETTEXT], [1],
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes'
+ dnl because some of the testsuite requires it.
+ BUILD_INCLUDED_LIBINTL=yes
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST([BUILD_INCLUDED_LIBINTL])
+ AC_SUBST([USE_INCLUDED_LIBINTL])
+ AC_SUBST([CATOBJEXT])
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST([INTLLIBS])
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ AC_SUBST([POSUB])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
+
+
+dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], [])
diff --git a/m4/host-cpu-c-abi.m4 b/m4/host-cpu-c-abi.m4
new file mode 100644
index 0000000..6db2aa2
--- /dev/null
+++ b/m4/host-cpu-c-abi.m4
@@ -0,0 +1,675 @@
+# host-cpu-c-abi.m4 serial 13
+dnl Copyright (C) 2002-2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible and Sam Steingold.
+
+dnl Sets the HOST_CPU variable to the canonical name of the CPU.
+dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its
+dnl C language ABI (application binary interface).
+dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in
+dnl config.h.
+dnl
+dnl This canonical name can be used to select a particular assembly language
+dnl source file that will interoperate with C code on the given host.
+dnl
+dnl For example:
+dnl * 'i386' and 'sparc' are different canonical names, because code for i386
+dnl will not run on SPARC CPUs and vice versa. They have different
+dnl instruction sets.
+dnl * 'sparc' and 'sparc64' are different canonical names, because code for
+dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code
+dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit
+dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit
+dnl mode, but not both.
+dnl * 'mips' and 'mipsn32' are different canonical names, because they use
+dnl different argument passing and return conventions for C functions, and
+dnl although the instruction set of 'mips' is a large subset of the
+dnl instruction set of 'mipsn32'.
+dnl * 'mipsn32' and 'mips64' are different canonical names, because they use
+dnl different sizes for the C types like 'int' and 'void *', and although
+dnl the instruction sets of 'mipsn32' and 'mips64' are the same.
+dnl * The same canonical name is used for different endiannesses. You can
+dnl determine the endianness through preprocessor symbols:
+dnl - 'arm': test __ARMEL__.
+dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL.
+dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN.
+dnl * The same name 'i386' is used for CPUs of type i386, i486, i586
+dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because
+dnl - Instructions that do not exist on all of these CPUs (cmpxchg,
+dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your
+dnl assembly language source files use such instructions, you will
+dnl need to make the distinction.
+dnl - Speed of execution of the common instruction set is reasonable across
+dnl the entire family of CPUs. If you have assembly language source files
+dnl that are optimized for particular CPU types (like GNU gmp has), you
+dnl will need to make the distinction.
+dnl See <https://en.wikipedia.org/wiki/X86_instruction_listings>.
+AC_DEFUN([gl_HOST_CPU_C_ABI],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_C_ASM])
+ AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi],
+ [case "$host_cpu" in
+
+changequote(,)dnl
+ i[34567]86 )
+changequote([,])dnl
+ gl_cv_host_cpu_c_abi=i386
+ ;;
+
+ x86_64 )
+ # On x86_64 systems, the C compiler may be generating code in one of
+ # these ABIs:
+ # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+ # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+ # with native Windows (mingw, MSVC).
+ # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+ # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if (defined __x86_64__ || defined __amd64__ \
+ || defined _M_X64 || defined _M_AMD64)
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __ILP32__ || defined _ILP32
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi=x86_64-x32],
+ [gl_cv_host_cpu_c_abi=x86_64])],
+ [gl_cv_host_cpu_c_abi=i386])
+ ;;
+
+changequote(,)dnl
+ alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
+changequote([,])dnl
+ gl_cv_host_cpu_c_abi=alpha
+ ;;
+
+ arm* | aarch64 )
+ # Assume arm with EABI.
+ # On arm64 systems, the C compiler may be generating code in one of
+ # these ABIs:
+ # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+ # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+ # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#ifdef __aarch64__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __ILP32__ || defined _ILP32
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi=arm64-ilp32],
+ [gl_cv_host_cpu_c_abi=arm64])],
+ [# Don't distinguish little-endian and big-endian arm, since they
+ # don't require different machine code for simple operations and
+ # since the user can distinguish them through the preprocessor
+ # defines __ARMEL__ vs. __ARMEB__.
+ # But distinguish arm which passes floating-point arguments and
+ # return values in integer registers (r0, r1, ...) - this is
+ # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which
+ # passes them in float registers (s0, s1, ...) and double registers
+ # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer
+ # sets the preprocessor defines __ARM_PCS (for the first case) and
+ # __ARM_PCS_VFP (for the second case), but older GCC does not.
+ echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c
+ # Look for a reference to the register d0 in the .s file.
+ AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
+ if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then
+ gl_cv_host_cpu_c_abi=armhf
+ else
+ gl_cv_host_cpu_c_abi=arm
+ fi
+ rm -f conftest*
+ ])
+ ;;
+
+ hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+ # On hppa, the C compiler may be generating 32-bit code or 64-bit
+ # code. In the latter case, it defines _LP64 and __LP64__.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#ifdef __LP64__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi=hppa64],
+ [gl_cv_host_cpu_c_abi=hppa])
+ ;;
+
+ ia64* )
+ # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+ # 32-bit code. In the latter case, it defines _ILP32.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#ifdef _ILP32
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi=ia64-ilp32],
+ [gl_cv_host_cpu_c_abi=ia64])
+ ;;
+
+ mips* )
+ # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+ # at 32.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi=mips64],
+ [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but
+ # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32.
+ # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but
+ # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if (_MIPS_SIM == _ABIN32)
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi=mipsn32],
+ [gl_cv_host_cpu_c_abi=mips])])
+ ;;
+
+ powerpc* )
+ # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+ # No need to distinguish them here; the caller may distinguish
+ # them based on the OS.
+ # On powerpc64 systems, the C compiler may still be generating
+ # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+ # be generating 64-bit code.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __powerpc64__ || defined _ARCH_PPC64
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [# On powerpc64, there are two ABIs on Linux: The AIX compatible
+ # one and the ELFv2 one. The latter defines _CALL_ELF=2.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined _CALL_ELF && _CALL_ELF == 2
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi=powerpc64-elfv2],
+ [gl_cv_host_cpu_c_abi=powerpc64])
+ ],
+ [gl_cv_host_cpu_c_abi=powerpc])
+ ;;
+
+ rs6000 )
+ gl_cv_host_cpu_c_abi=powerpc
+ ;;
+
+ riscv32 | riscv64 )
+ # There are 2 architectures (with variants): rv32* and rv64*.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if __riscv_xlen == 64
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [cpu=riscv64],
+ [cpu=riscv32])
+ # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+ # Size of 'long' and 'void *':
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __LP64__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [main_abi=lp64],
+ [main_abi=ilp32])
+ # Float ABIs:
+ # __riscv_float_abi_double:
+ # 'float' and 'double' are passed in floating-point registers.
+ # __riscv_float_abi_single:
+ # 'float' are passed in floating-point registers.
+ # __riscv_float_abi_soft:
+ # No values are passed in floating-point registers.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __riscv_float_abi_double
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [float_abi=d],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __riscv_float_abi_single
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [float_abi=f],
+ [float_abi=''])
+ ])
+ gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}"
+ ;;
+
+ s390* )
+ # On s390x, the C compiler may be generating 64-bit (= s390x) code
+ # or 31-bit (= s390) code.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __LP64__ || defined __s390x__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi=s390x],
+ [gl_cv_host_cpu_c_abi=s390])
+ ;;
+
+ sparc | sparc64 )
+ # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+ # C compiler still generates 32-bit code.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __sparcv9 || defined __arch64__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi=sparc64],
+ [gl_cv_host_cpu_c_abi=sparc])
+ ;;
+
+ *)
+ gl_cv_host_cpu_c_abi="$host_cpu"
+ ;;
+ esac
+ ])
+
+ dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same.
+ HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'`
+ HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi"
+ AC_SUBST([HOST_CPU])
+ AC_SUBST([HOST_CPU_C_ABI])
+
+ # This was
+ # AC_DEFINE_UNQUOTED([__${HOST_CPU}__])
+ # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__])
+ # earlier, but KAI C++ 3.2d doesn't like this.
+ sed -e 's/-/_/g' >> confdefs.h <<EOF
+#ifndef __${HOST_CPU}__
+#define __${HOST_CPU}__ 1
+#endif
+#ifndef __${HOST_CPU_C_ABI}__
+#define __${HOST_CPU_C_ABI}__ 1
+#endif
+EOF
+ AH_TOP([/* CPU and C ABI indicator */
+#ifndef __i386__
+#undef __i386__
+#endif
+#ifndef __x86_64_x32__
+#undef __x86_64_x32__
+#endif
+#ifndef __x86_64__
+#undef __x86_64__
+#endif
+#ifndef __alpha__
+#undef __alpha__
+#endif
+#ifndef __arm__
+#undef __arm__
+#endif
+#ifndef __armhf__
+#undef __armhf__
+#endif
+#ifndef __arm64_ilp32__
+#undef __arm64_ilp32__
+#endif
+#ifndef __arm64__
+#undef __arm64__
+#endif
+#ifndef __hppa__
+#undef __hppa__
+#endif
+#ifndef __hppa64__
+#undef __hppa64__
+#endif
+#ifndef __ia64_ilp32__
+#undef __ia64_ilp32__
+#endif
+#ifndef __ia64__
+#undef __ia64__
+#endif
+#ifndef __m68k__
+#undef __m68k__
+#endif
+#ifndef __mips__
+#undef __mips__
+#endif
+#ifndef __mipsn32__
+#undef __mipsn32__
+#endif
+#ifndef __mips64__
+#undef __mips64__
+#endif
+#ifndef __powerpc__
+#undef __powerpc__
+#endif
+#ifndef __powerpc64__
+#undef __powerpc64__
+#endif
+#ifndef __powerpc64_elfv2__
+#undef __powerpc64_elfv2__
+#endif
+#ifndef __riscv32__
+#undef __riscv32__
+#endif
+#ifndef __riscv64__
+#undef __riscv64__
+#endif
+#ifndef __riscv32_ilp32__
+#undef __riscv32_ilp32__
+#endif
+#ifndef __riscv32_ilp32f__
+#undef __riscv32_ilp32f__
+#endif
+#ifndef __riscv32_ilp32d__
+#undef __riscv32_ilp32d__
+#endif
+#ifndef __riscv64_ilp32__
+#undef __riscv64_ilp32__
+#endif
+#ifndef __riscv64_ilp32f__
+#undef __riscv64_ilp32f__
+#endif
+#ifndef __riscv64_ilp32d__
+#undef __riscv64_ilp32d__
+#endif
+#ifndef __riscv64_lp64__
+#undef __riscv64_lp64__
+#endif
+#ifndef __riscv64_lp64f__
+#undef __riscv64_lp64f__
+#endif
+#ifndef __riscv64_lp64d__
+#undef __riscv64_lp64d__
+#endif
+#ifndef __s390__
+#undef __s390__
+#endif
+#ifndef __s390x__
+#undef __s390x__
+#endif
+#ifndef __sh__
+#undef __sh__
+#endif
+#ifndef __sparc__
+#undef __sparc__
+#endif
+#ifndef __sparc64__
+#undef __sparc64__
+#endif
+])
+
+])
+
+
+dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI
+dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit
+dnl one, or to 'unknown' if unknown.
+dnl This is a simplified variant of gl_HOST_CPU_C_ABI.
+AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit],
+ [if test -n "$gl_cv_host_cpu_c_abi"; then
+ case "$gl_cv_host_cpu_c_abi" in
+ i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
+ gl_cv_host_cpu_c_abi_32bit=yes ;;
+ x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 )
+ gl_cv_host_cpu_c_abi_32bit=no ;;
+ *)
+ gl_cv_host_cpu_c_abi_32bit=unknown ;;
+ esac
+ else
+ case "$host_cpu" in
+
+ # CPUs that only support a 32-bit ABI.
+ arc \
+ | bfin \
+ | cris* \
+ | csky \
+ | epiphany \
+ | ft32 \
+ | h8300 \
+ | m68k \
+ | microblaze | microblazeel \
+ | nds32 | nds32le | nds32be \
+ | nios2 | nios2eb | nios2el \
+ | or1k* \
+ | or32 \
+ | sh | sh[1234] | sh[1234]e[lb] \
+ | tic6x \
+ | xtensa* )
+ gl_cv_host_cpu_c_abi_32bit=yes
+ ;;
+
+ # CPUs that only support a 64-bit ABI.
+changequote(,)dnl
+ alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \
+ | mmix )
+changequote([,])dnl
+ gl_cv_host_cpu_c_abi_32bit=no
+ ;;
+
+changequote(,)dnl
+ i[34567]86 )
+changequote([,])dnl
+ gl_cv_host_cpu_c_abi_32bit=yes
+ ;;
+
+ x86_64 )
+ # On x86_64 systems, the C compiler may be generating code in one of
+ # these ABIs:
+ # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+ # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+ # with native Windows (mingw, MSVC).
+ # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+ # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if (defined __x86_64__ || defined __amd64__ \
+ || defined _M_X64 || defined _M_AMD64) \
+ && !(defined __ILP32__ || defined _ILP32)
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi_32bit=no],
+ [gl_cv_host_cpu_c_abi_32bit=yes])
+ ;;
+
+ arm* | aarch64 )
+ # Assume arm with EABI.
+ # On arm64 systems, the C compiler may be generating code in one of
+ # these ABIs:
+ # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+ # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+ # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi_32bit=no],
+ [gl_cv_host_cpu_c_abi_32bit=yes])
+ ;;
+
+ hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+ # On hppa, the C compiler may be generating 32-bit code or 64-bit
+ # code. In the latter case, it defines _LP64 and __LP64__.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#ifdef __LP64__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi_32bit=no],
+ [gl_cv_host_cpu_c_abi_32bit=yes])
+ ;;
+
+ ia64* )
+ # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+ # 32-bit code. In the latter case, it defines _ILP32.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#ifdef _ILP32
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi_32bit=yes],
+ [gl_cv_host_cpu_c_abi_32bit=no])
+ ;;
+
+ mips* )
+ # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+ # at 32.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi_32bit=no],
+ [gl_cv_host_cpu_c_abi_32bit=yes])
+ ;;
+
+ powerpc* )
+ # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+ # No need to distinguish them here; the caller may distinguish
+ # them based on the OS.
+ # On powerpc64 systems, the C compiler may still be generating
+ # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+ # be generating 64-bit code.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __powerpc64__ || defined _ARCH_PPC64
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi_32bit=no],
+ [gl_cv_host_cpu_c_abi_32bit=yes])
+ ;;
+
+ rs6000 )
+ gl_cv_host_cpu_c_abi_32bit=yes
+ ;;
+
+ riscv32 | riscv64 )
+ # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+ # Size of 'long' and 'void *':
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __LP64__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi_32bit=no],
+ [gl_cv_host_cpu_c_abi_32bit=yes])
+ ;;
+
+ s390* )
+ # On s390x, the C compiler may be generating 64-bit (= s390x) code
+ # or 31-bit (= s390) code.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __LP64__ || defined __s390x__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi_32bit=no],
+ [gl_cv_host_cpu_c_abi_32bit=yes])
+ ;;
+
+ sparc | sparc64 )
+ # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+ # C compiler still generates 32-bit code.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __sparcv9 || defined __arch64__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [gl_cv_host_cpu_c_abi_32bit=no],
+ [gl_cv_host_cpu_c_abi_32bit=yes])
+ ;;
+
+ *)
+ gl_cv_host_cpu_c_abi_32bit=unknown
+ ;;
+ esac
+ fi
+ ])
+
+ HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
+])
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644
index 0000000..e593b72
--- /dev/null
+++ b/m4/iconv.m4
@@ -0,0 +1,288 @@
+# iconv.m4 serial 21
+dnl Copyright (C) 2000-2002, 2007-2014, 2016-2020 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+ ]],
+ [[iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);]])],
+ [am_cv_func_iconv=yes])
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+ ]],
+ [[iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);]])],
+ [am_cv_lib_iconv=yes]
+ [am_cv_func_iconv=yes])
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
+ dnl Solaris 10.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ am_cv_func_iconv_works=no
+ for ac_iconv_const in '' 'const'; do
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+ ]],
+ [[int result = 0;
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 1;
+ iconv_close (cd_utf8_to_88591);
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\263";
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 2;
+ iconv_close (cd_ascii_to_88591);
+ }
+ }
+ /* Test against AIX 6.1..7.1 bug: Buffer overrun. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304";
+ static char buf[2] = { (char)0xDE, (char)0xAD };
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = 1;
+ char *outptr = buf;
+ size_t outbytesleft = 1;
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+ result |= 4;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ result |= 8;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ {
+ /* Try standardized names. */
+ iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
+ /* Try IRIX, OSF/1 names. */
+ iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
+ /* Try AIX names. */
+ iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
+ /* Try HP-UX names. */
+ iconv_t cd4 = iconv_open ("utf8", "eucJP");
+ if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
+ && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
+ result |= 16;
+ if (cd1 != (iconv_t)(-1))
+ iconv_close (cd1);
+ if (cd2 != (iconv_t)(-1))
+ iconv_close (cd2);
+ if (cd3 != (iconv_t)(-1))
+ iconv_close (cd3);
+ if (cd4 != (iconv_t)(-1))
+ iconv_close (cd4);
+ }
+ return result;
+]])],
+ [am_cv_func_iconv_works=yes], ,
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ test "$am_cv_func_iconv_works" = no || break
+ done
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE([HAVE_ICONV], [1],
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST([LIBICONV])
+ AC_SUBST([LTLIBICONV])
+])
+
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl warnings.
+m4_define([gl_iconv_AC_DEFUN],
+ m4_version_prereq([2.64],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [m4_ifdef([gl_00GNULIB],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [[AC_DEFUN(
+ [$1], [$2])]])]))
+gl_iconv_AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL([am_cv_proto_iconv], [
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+ ]],
+ [[]])],
+ [am_cv_proto_iconv_arg1=""],
+ [am_cv_proto_iconv_arg1="const"])
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([
+ $am_cv_proto_iconv])
+ else
+ dnl When compiling GNU libiconv on a system that does not have iconv yet,
+ dnl pick the POSIX compliant declaration without 'const'.
+ am_cv_proto_iconv_arg1=""
+ fi
+ AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+ [Define as const if the declaration of iconv() needs const.])
+ dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
+ m4_ifdef([gl_ICONV_H_DEFAULTS],
+ [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
+ if test -n "$am_cv_proto_iconv_arg1"; then
+ ICONV_CONST="const"
+ fi
+ ])
+])
diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4
new file mode 100644
index 0000000..ebd9937
--- /dev/null
+++ b/m4/intlmacosx.m4
@@ -0,0 +1,65 @@
+# intlmacosx.m4 serial 8 (gettext-0.20.2)
+dnl Copyright (C) 2004-2014, 2016, 2019-2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on Mac OS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in Mac OS X 10.4.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ [gt_cv_func_CFPreferencesCopyAppValue],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <CoreFoundation/CFPreferences.h>]],
+ [[CFPreferencesCopyAppValue(NULL, NULL)]])],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
+ [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent,
+ dnl because in macOS 10.13.4 it has the following behaviour:
+ dnl When two or more languages are specified in the
+ dnl "System Preferences > Language & Region > Preferred Languages" panel,
+ dnl it returns en_CC where CC is the territory (even when English is not among
+ dnl the preferred languages!). What we want instead is what
+ dnl CFLocaleCopyCurrent returned in earlier macOS releases and what
+ dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the
+ dnl first among the preferred languages and CC is the territory.
+ AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <CoreFoundation/CFLocale.h>]],
+ [[CFLocaleCopyPreferredLanguages();]])],
+ [gt_cv_func_CFLocaleCopyPreferredLanguages=yes],
+ [gt_cv_func_CFLocaleCopyPreferredLanguages=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1],
+ [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644
index 0000000..98c348f
--- /dev/null
+++ b/m4/lib-ld.m4
@@ -0,0 +1,168 @@
+# lib-ld.m4 serial 9
+dnl Copyright (C) 1996-2003, 2009-2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid
+dnl collision with libtool.m4.
+
+dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes
+ ;;
+*)
+ acl_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-2.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld [default=no]])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+if test -n "$LD"; then
+ AC_MSG_CHECKING([for ld])
+elif test "$GCC" = yes; then
+ AC_MSG_CHECKING([for ld used by $CC])
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+if test -n "$LD"; then
+ # Let the user override the test with a path.
+ :
+else
+ AC_CACHE_VAL([acl_cv_path_LD],
+ [
+ acl_cv_path_LD= # Final result of this test
+ ac_prog=ld # Program to search in $PATH
+ if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ acl_output=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $acl_output in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'`
+ while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do
+ acl_output=`echo $acl_output | sed "s%$re_direlt%/%"`
+ done
+ # Got the pathname. No search in PATH is needed.
+ acl_cv_path_LD="$acl_output"
+ ac_prog=
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+ fi
+ if test -n "$ac_prog"; then
+ # Search for $ac_prog in $PATH.
+ acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$acl_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_ifs"
+ fi
+ case $host in
+ *-*-aix*)
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __powerpc64__ || defined _ARCH_PPC64
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [# The compiler produces 64-bit code. Add option '-b64' so that the
+ # linker groks 64-bit object files.
+ case "$acl_cv_path_LD " in
+ *" -b64 "*) ;;
+ *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;;
+ esac
+ ], [])
+ ;;
+ sparc64-*-netbsd*)
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#if defined __sparcv9 || defined __arch64__
+ int ok;
+ #else
+ error fail
+ #endif
+ ]])],
+ [],
+ [# The compiler produces 32-bit code. Add option '-m elf32_sparc'
+ # so that the linker groks 32-bit object files.
+ case "$acl_cv_path_LD " in
+ *" -m elf32_sparc "*) ;;
+ *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;;
+ esac
+ ])
+ ;;
+ esac
+ ])
+ LD="$acl_cv_path_LD"
+fi
+if test -n "$LD"; then
+ AC_MSG_RESULT([$LD])
+else
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([no acceptable ld found in \$PATH])
+fi
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644
index 0000000..eecf70e
--- /dev/null
+++ b/m4/lib-link.m4
@@ -0,0 +1,800 @@
+# lib-link.m4 serial 31
+dnl Copyright (C) 2001-2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.61])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[m4_translit([$1],[./+-], [____])])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[m4_translit([$1],[./+-], [____])])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+ dnl because these -l options might require -L options that are present in
+ dnl LIBS. -l options benefit only from the -L options listed before it.
+ dnl Otherwise, add it to the front of LIBS, because it may be a static
+ dnl library that depends on another static library that is present in LIBS.
+ dnl Static libraries benefit only from the static libraries listed after
+ dnl it.
+ case " $LIB[]NAME" in
+ *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+ *) LIBS="$LIB[]NAME $LIBS" ;;
+ esac
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[$3]], [[$4]])],
+ [ac_cv_lib[]Name=yes],
+ [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_libname_spec,
+dnl acl_library_names_spec,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Complain if config.rpath is missing.
+ AC_REQUIRE_AUX_FILE([config.rpath])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE([rpath],
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ define([acl_frompackage_]NAME, [$2])
+ popdef([NAME])
+ pushdef([PACK],[$2])
+ pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ define([acl_libsinpackage_]PACKUP,
+ m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1])
+ popdef([PACKUP])
+ popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+ pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+ eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
+ ])
+ AC_ARG_WITH(PACK[-prefix],
+[[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
+ --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+ eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ additional_libdir2="$withval/$acl_libdirstem2"
+ additional_libdir3="$withval/$acl_libdirstem3"
+ fi
+ fi
+])
+ if test "X$additional_libdir2" = "X$additional_libdir"; then
+ additional_libdir2=
+ fi
+ if test "X$additional_libdir3" = "X$additional_libdir"; then
+ additional_libdir3=
+ fi
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+ dnl computed. So it has to be reset here.
+ HAVE_LIB[]NAME=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+ if test "X$found_dir" = "X"; then
+ eval dir=\$$additional_libdir_variable
+ if test -n "$dir"; then
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ fi
+ done
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$acl_hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem3 | */$acl_libdirstem3/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
+ haveit=
+ if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$dependency_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$dependency_libdir"; then
+ dnl Really add $dependency_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$dependency_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$dependency_libdir"; then
+ dnl Really add $dependency_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+ popdef([PACKLIBS])
+ popdef([PACKUP])
+ popdef([PACK])
+ popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2" \
+ && test "X$dir" != "X/usr/$acl_libdirstem3"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2" \
+ && test "X$dir" != "X/usr/$acl_libdirstem3"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644
index 0000000..c8a0b46
--- /dev/null
+++ b/m4/lib-prefix.m4
@@ -0,0 +1,320 @@
+# lib-prefix.m4 serial 17
+dnl Copyright (C) 2001-2005, 2008-2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_ARG_WITH([lib-prefix],
+[[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir]],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a function acl_is_expected_elfclass, that tests whether standard input
+dn; has a 32-bit or 64-bit ELF header, depending on the host CPU ABI,
+dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing
+dnl the basename of the libdir to try in turn, either "lib" or "lib64" or
+dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar.
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib, lib32, and lib64.
+ dnl On most glibc systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on
+ dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go
+ dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib.
+ dnl We determine the compiler's default mode by looking at the compiler's
+ dnl library search path. If at least one of its elements ends in /lib64 or
+ dnl points to a directory whose absolute pathname ends in /lib64, we use that
+ dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default,
+ dnl namely "lib".
+ dnl On Solaris systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+ dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT])
+
+ AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf],
+ [AC_EGREP_CPP([Extensible Linking Format],
+ [#ifdef __ELF__
+ Extensible Linking Format
+ #endif
+ ],
+ [gl_cv_elf=yes],
+ [gl_cv_elf=no])
+ ])
+ if test $gl_cv_elf; then
+ # Extract the ELF class of a file (5th byte) in decimal.
+ # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
+ if od -A x < /dev/null >/dev/null 2>/dev/null; then
+ # Use POSIX od.
+ func_elfclass ()
+ {
+ od -A n -t d1 -j 4 -N 1
+ }
+ else
+ # Use BSD hexdump.
+ func_elfclass ()
+ {
+ dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "'
+ echo
+ }
+ fi
+changequote(,)dnl
+ case $HOST_CPU_C_ABI_32BIT in
+ yes)
+ # 32-bit ABI.
+ acl_is_expected_elfclass ()
+ {
+ test "`func_elfclass | sed -e 's/[ ]//g'`" = 1
+ }
+ ;;
+ no)
+ # 64-bit ABI.
+ acl_is_expected_elfclass ()
+ {
+ test "`func_elfclass | sed -e 's/[ ]//g'`" = 2
+ }
+ ;;
+ *)
+ # Unknown.
+ acl_is_expected_elfclass ()
+ {
+ :
+ }
+ ;;
+ esac
+changequote([,])dnl
+ else
+ acl_is_expected_elfclass ()
+ {
+ :
+ }
+ fi
+
+ dnl Allow the user to override the result by setting acl_cv_libdirstems.
+ AC_CACHE_CHECK([for the common suffixes of directories in the library search path],
+ [acl_cv_libdirstems],
+ [dnl Try 'lib' first, because that's the default for libdir in GNU, see
+ dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>.
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ acl_libdirstem3=
+ case "$host_os" in
+ solaris*)
+ dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+ dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>.
+ dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+ dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+ dnl symlink is missing, so we set acl_libdirstem2 too.
+ if test $HOST_CPU_C_ABI_32BIT = no; then
+ acl_libdirstem2=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem3=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem3=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ dnl If $CC generates code for a 32-bit ABI, the libraries are
+ dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64.
+ dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries
+ dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32.
+ dnl Find the compiler's search path. However, non-system compilers
+ dnl sometimes have odd library search paths. But we can't simply invoke
+ dnl '/usr/bin/gcc -print-search-dirs' because that would not take into
+ dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS.
+ searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \
+ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test $HOST_CPU_C_ABI_32BIT != no; then
+ # 32-bit or unknown ABI.
+ if test -d /usr/lib32; then
+ acl_libdirstem2=lib32
+ fi
+ fi
+ if test $HOST_CPU_C_ABI_32BIT != yes; then
+ # 64-bit or unknown ABI.
+ if test -d /usr/lib64; then
+ acl_libdirstem3=lib64
+ fi
+ fi
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;;
+ */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib32 ) acl_libdirstem2=lib32 ;;
+ */lib64 ) acl_libdirstem3=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ if test $HOST_CPU_C_ABI_32BIT = yes; then
+ # 32-bit ABI.
+ acl_libdirstem3=
+ fi
+ if test $HOST_CPU_C_ABI_32BIT = no; then
+ # 64-bit ABI.
+ acl_libdirstem2=
+ fi
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+ test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem"
+ acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3"
+ ])
+ dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and
+ dnl acl_libdirstem3.
+changequote(,)dnl
+ acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
+ acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'`
+ acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'`
+changequote([,])dnl
+])
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100644
index 0000000..5a506fc
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,32 @@
+# nls.m4 serial 6 (gettext-0.20.2)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019-2020 Free
+dnl Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT([$USE_NLS])
+ AC_SUBST([USE_NLS])
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644
index 0000000..3778fd7
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,450 @@
+# po.m4 serial 31 (gettext-0.20.2)
+dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.60])
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+ AC_REQUIRE([AC_PROG_SED])dnl
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.20])
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl Test whether it is GNU msgmerge >= 0.20.
+ if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then
+ MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt'
+ else
+ dnl Test whether it is GNU msgmerge >= 0.12.
+ if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then
+ MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet'
+ else
+ dnl With these old versions, $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) is
+ dnl slow. But this is not a big problem, as such old gettext versions are
+ dnl hardly in use any more.
+ MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet'
+ fi
+ fi
+ AC_SUBST([MSGMERGE_FOR_MSGFMT_OPTION])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+ AC_CONFIG_COMMANDS([po-directories], [[
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ gt_tab=`printf '\t'`
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done]],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS.
+ OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS"
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ tab=`printf '\t'`
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{
+ # Seen the first line of the variable definition.
+ s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+ ALL_LINGUAS=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ tab=`printf '\t'`
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+ XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644
index 0000000..f28010a
--- /dev/null
+++ b/m4/progtest.m4
@@ -0,0 +1,91 @@
+# progtest.m4 serial 8 (gettext-0.20.2)
+dnl Copyright (C) 1996-2003, 2005, 2008-2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ([2.50])
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL([ac_cv_path_$1],
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$][$1])
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST([$1])dnl
+])
diff --git a/man-po/Makefile.am b/man-po/Makefile.am
new file mode 100644
index 0000000..87c797f
--- /dev/null
+++ b/man-po/Makefile.am
@@ -0,0 +1,95 @@
+## Process this file with automake to produce Makefile.in
+
+src_MANS = $(wildcard $(top_srcdir)/doc/*.[1-9])
+
+translated_MANS = $(wildcard translated/*/*.[1-9])
+
+EXTRA_DIST = \
+ po4a.cfg \
+ psmisc.pot \
+ $(translated_MANS)
+
+
+# Extract the list of languages from the po4a config file.
+LINGUAS_DIST = $(shell sed -ne 's/^.*\[po4a_langs\] \(.*\)$$/\1/p' $(srcdir)/po4a.cfg)
+
+# If the user has not defined it let's use the default.
+LINGUAS ?= $(LINGUAS_DIST)
+
+
+PO4A_V = $(PO4A_V_@AM_V@)
+PO4A_V_ = $(PO4A_V_@AM_DEFAULT_V@)
+PO4A_V_0 = @echo " PO4A $@";
+
+### PO4A_OPTS = --previous --srcdir $(srcdir) --destdir $(CURDIR) --no-backups \
+### --package-name psmisc --package-version $(PACKAGE_VERSION) \
+### --msgid-bugs-address "Craig Small <csmall@enc.com.au>"
+
+PO4A_OPTS = --previous --srcdir $(srcdir) --destdir $(CURDIR) --no-backups \
+ --package-name $(PACKAGE) --package-version $(VERSION) \
+ --msgid-bugs-address "Craig Small <csmall@dropbear.xyz>"
+
+all-local: all-local-@USE_PO4A@
+
+all-local-no:
+all-local-yes: man.stamp
+
+# FIXME: Use a stamp file until po4a supports them internally.
+man.stamp:
+ $(PO4A_V) $(PO4A) $(PO4A_OPTS) $(srcdir)/po4a.cfg
+ $(AM_V_at) touch $@
+
+clean-local: clean-local-@USE_PO4A@
+
+clean-local-no:
+clean-local-yes:
+ rm -rf $(LINGUAS_DIST)
+ $(AM_V_at) rm -f man.stamp
+
+.PHONY: update-po
+
+psmisc.pot: $(src_MANS)
+ po4a-gettextize -M utf8 --option groff_code=verbatim --option generated --option untranslated="a.RE,\|" --option unknown_macros=untranslated -f man $(patsubst %,-m%,$(subst :, ,$(src_MANS))) -p psmisc.pot
+
+update-po:
+ $(PO4A_V) $(PO4A) $(PO4A_OPTS) --force $(srcdir)/po4a.cfg
+
+
+install-data-local:
+ for lang in $(LINGUAS); do \
+ files=""; \
+ for trans in $(notdir $(src_MANS)); do \
+ if [ -f $(CURDIR)/$$lang/$$trans ]; then \
+ files="$$files $(CURDIR)/$$lang/$$trans"; \
+ elif [ -f $(srcdir)/$$lang/$$trans ]; then \
+ files="$$files $(srcdir)/$$lang/$$trans"; \
+ fi; \
+ done; \
+ $(MAKE) -C .. install-man \
+ mandir="$(mandir)/$$lang" \
+ dist_man_MANS="$$files"; \
+ done
+
+uninstall-local:
+ for lang in $(LINGUAS); do \
+ files=""; \
+ for trans in $(notdir $(src_MANS)); do \
+ if [ -f $(CURDIR)/$$lang/$$trans ]; then \
+ files="$$files $(CURDIR)/$$lang/$$trans"; \
+ elif [ -f $(srcdir)/$$lang/$$trans ]; then \
+ files="$$files $(srcdir)/$$lang/$$trans"; \
+ fi; \
+ done; \
+ $(MAKE) -C .. uninstall-man \
+ mandir="$(mandir)/$$lang" \
+ dist_man_MANS="$$files"; \
+ done
+
+dist-hook: man.stamp
+ cp $(srcdir)/man.stamp $(distdir)/
+ for lang in $(LINGUAS_DIST); do \
+ cp $(srcdir)/$$lang.po $(distdir); \
+ cp $(srcdir)/$$lang.add $(distdir); \
+ $(MKDIR_P) $(distdir)/$$lang; \
+ cp -r $(srcdir)/$$lang $(distdir)/; \
+ done
diff --git a/man-po/Makefile.in b/man-po/Makefile.in
new file mode 100644
index 0000000..0294576
--- /dev/null
+++ b/man-po/Makefile.in
@@ -0,0 +1,541 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man-po
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEJAGNU = @DEJAGNU@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HARDEN_CFLAGS = @HARDEN_CFLAGS@
+HARDEN_LDFLAGS = @HARDEN_LDFLAGS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PO4A = @PO4A@
+POSUB = @POSUB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMCAP_LIB = @TERMCAP_LIB@
+USE_NLS = @USE_NLS@
+USE_PO4A = @USE_PO4A@
+VERSION = @VERSION@
+WITH_AppArmor = @WITH_AppArmor@
+WITH_IPV6 = @WITH_IPV6@
+WITH_SELINUX = @WITH_SELINUX@
+WITH_STATX = @WITH_STATX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+src_MANS = $(wildcard $(top_srcdir)/doc/*.[1-9])
+translated_MANS = $(wildcard translated/*/*.[1-9])
+EXTRA_DIST = \
+ po4a.cfg \
+ psmisc.pot \
+ $(translated_MANS)
+
+
+# Extract the list of languages from the po4a config file.
+LINGUAS_DIST = $(shell sed -ne 's/^.*\[po4a_langs\] \(.*\)$$/\1/p' $(srcdir)/po4a.cfg)
+PO4A_V = $(PO4A_V_@AM_V@)
+PO4A_V_ = $(PO4A_V_@AM_DEFAULT_V@)
+PO4A_V_0 = @echo " PO4A $@";
+
+### PO4A_OPTS = --previous --srcdir $(srcdir) --destdir $(CURDIR) --no-backups \
+### --package-name psmisc --package-version $(PACKAGE_VERSION) \
+### --msgid-bugs-address "Craig Small <csmall@enc.com.au>"
+PO4A_OPTS = --previous --srcdir $(srcdir) --destdir $(CURDIR) --no-backups \
+ --package-name $(PACKAGE) --package-version $(VERSION) \
+ --msgid-bugs-address "Craig Small <csmall@dropbear.xyz>"
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man-po/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man-po/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+ clean-local cscopelist-am ctags-am dist-hook distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-data-local install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags-am uninstall uninstall-am uninstall-local
+
+.PRECIOUS: Makefile
+
+
+# If the user has not defined it let's use the default.
+LINGUAS ?= $(LINGUAS_DIST)
+
+all-local: all-local-@USE_PO4A@
+
+all-local-no:
+all-local-yes: man.stamp
+
+# FIXME: Use a stamp file until po4a supports them internally.
+man.stamp:
+ $(PO4A_V) $(PO4A) $(PO4A_OPTS) $(srcdir)/po4a.cfg
+ $(AM_V_at) touch $@
+
+clean-local: clean-local-@USE_PO4A@
+
+clean-local-no:
+clean-local-yes:
+ rm -rf $(LINGUAS_DIST)
+ $(AM_V_at) rm -f man.stamp
+
+.PHONY: update-po
+
+psmisc.pot: $(src_MANS)
+ po4a-gettextize -M utf8 --option groff_code=verbatim --option generated --option untranslated="a.RE,\|" --option unknown_macros=untranslated -f man $(patsubst %,-m%,$(subst :, ,$(src_MANS))) -p psmisc.pot
+
+update-po:
+ $(PO4A_V) $(PO4A) $(PO4A_OPTS) --force $(srcdir)/po4a.cfg
+
+install-data-local:
+ for lang in $(LINGUAS); do \
+ files=""; \
+ for trans in $(notdir $(src_MANS)); do \
+ if [ -f $(CURDIR)/$$lang/$$trans ]; then \
+ files="$$files $(CURDIR)/$$lang/$$trans"; \
+ elif [ -f $(srcdir)/$$lang/$$trans ]; then \
+ files="$$files $(srcdir)/$$lang/$$trans"; \
+ fi; \
+ done; \
+ $(MAKE) -C .. install-man \
+ mandir="$(mandir)/$$lang" \
+ dist_man_MANS="$$files"; \
+ done
+
+uninstall-local:
+ for lang in $(LINGUAS); do \
+ files=""; \
+ for trans in $(notdir $(src_MANS)); do \
+ if [ -f $(CURDIR)/$$lang/$$trans ]; then \
+ files="$$files $(CURDIR)/$$lang/$$trans"; \
+ elif [ -f $(srcdir)/$$lang/$$trans ]; then \
+ files="$$files $(srcdir)/$$lang/$$trans"; \
+ fi; \
+ done; \
+ $(MAKE) -C .. uninstall-man \
+ mandir="$(mandir)/$$lang" \
+ dist_man_MANS="$$files"; \
+ done
+
+dist-hook: man.stamp
+ cp $(srcdir)/man.stamp $(distdir)/
+ for lang in $(LINGUAS_DIST); do \
+ cp $(srcdir)/$$lang.po $(distdir); \
+ cp $(srcdir)/$$lang.add $(distdir); \
+ $(MKDIR_P) $(distdir)/$$lang; \
+ cp -r $(srcdir)/$$lang $(distdir)/; \
+ done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man-po/da.po b/man-po/da.po
new file mode 100644
index 0000000..5afa6d2
--- /dev/null
+++ b/man-po/da.po
@@ -0,0 +1,1652 @@
+# Danish translations for psmisc-man package
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Copyright © of this file:
+# Joe Hansen <joedalton2@yahoo.dk>, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.5rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2022-05-26 08:09+0200\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr ""
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "Brugerkommandoer"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "NAVN"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser - identificer processer via filer eller sokler"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "SYNOPSIS"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> "
+"I<mellemrum>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<navn> ..."
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "BESKRIVELSE"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid ""
+"B<fuser> displays the PIDs of processes using the specified files or file "
+"systems. In the default display mode, each file name is followed by a "
+"letter denoting the type of access:"
+msgstr ""
+"B<fuser> viser PID'erne for processer via de angivne filer eller "
+"filsystemer. I visningens standardtilstand er hvert navn fulgt af et bogstav "
+"der benævner adgangstypen:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "nuværende mappe."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "kørbar fil under afvikling."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "Ã¥bn fil. B<f> udelades i visningens standardtilstand."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr "Ã¥bn fil for skrivning . B<F> udelades i visningens standardtilstand."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "rodmappe."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "mmap'et fil eller delt bibliotek."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid ""
+"B<fuser> returns a non-zero return code if none of the specified files is "
+"accessed or in case of a fatal error. If at least one access has been "
+"found, B<fuser> returns zero."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid ""
+"In order to look up processes using TCP and UDP sockets, the corresponding "
+"name space has to be selected with the B<-n> option. By default B<fuser> "
+"will look in both IPv6 and IPv4 sockets. To change the default behavior, "
+"use the B<-4> and B<-6> options. The socket(s) can be specified by the "
+"local and remote port, and the remote address. All fields are optional, but "
+"commas in front of missing fields must be present:"
+msgstr ""
+
+# Literally taken from the psmisc UI translation
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<lokal_port>][,[I<rmt_vært>][,[I<rmt_port>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid ""
+"Either symbolic or numeric values can be used for IP addresses and port "
+"numbers."
+msgstr ""
+"Enten symbolske eller numeriske værdier kan bruges for IP-adresser og "
+"portnumre."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid ""
+"B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr ""
+"B<fuser> viser kun PID'erne til standardud, alt andet sendes til "
+"standardfejl."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "TILVALG"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid ""
+"Show all files specified on the command line. By default, only files that "
+"are accessed by at least one process are shown."
+msgstr ""
+"Vis alle filer specificeret på kommandolinjen. Som standard vises kun filer "
+"der tilgås af mindst en proces."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "Samme som tilvalget B<-m->, brugt for POSIX-kompatibilitet."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "I stilhed ignoreret, brugt for POSIX-kompatibilitet."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid ""
+"Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, "
+"SIGKILL is sent. An B<fuser> process never kills itself, but may kill other "
+"B<fuser> processes. The effective user ID of the process executing B<fuser> "
+"is set to its real user ID before attempting to kill."
+msgstr ""
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid ""
+"Ask the user for confirmation before killing a process. This option is "
+"silently ignored if B<-k> is not present too."
+msgstr ""
+"Spørg brugeren om bekræftelse før en proces dræbes. Dette tilvalg bliver i "
+"stilhed ignoreret, hvis B<-k> ikke også er til stede."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid ""
+"For the name space B<file> let all comparisons be based on the inodes of the "
+"specified file(s) and never on the file names even on network based file "
+"systems."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "Vis alle kendte signalnavne."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< NAVN>, B<--mount >I<NAVN>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid ""
+"I<NAME> specifies a file on a mounted file system or a block device that is "
+"mounted. All processes accessing files on that file system are listed. If "
+"a directory is specified, it is automatically changed to I<NAME>/ to use any "
+"file system that might be mounted on that directory."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid ""
+"Request will be fulfilled only if I<NAME> specifies a mountpoint. This is "
+"an invaluable seat belt which prevents you from killing the machine if "
+"I<NAME> happens to not be a filesystem."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid ""
+"Kill only processes which have write access. This option is silently "
+"ignored if B<-k> is not present too."
+msgstr ""
+"Dræb kun processer der har skriveadgang. Dette tilvalg bliver i stilhed "
+"ignoreret, hvis B<-k> ikke også er til stede."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< NAVNERUME>, B<--namespace >I<NAVNERUM>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid ""
+"Select a different name space. The name spaces B<file> (file names, the "
+"default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are "
+"supported. For ports, either the port number or the symbolic name can be "
+"specified. If there is no ambiguity, the shortcut notation I<name>B</"
+">I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid ""
+"Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not "
+"be used with B<-s>."
+msgstr ""
+"Stille operation. B<-u> og B<-v> ignoreres i denne tilstand. B<-a> må ikke "
+"bruges med B<-s>."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid ""
+"Use the specified signal instead of SIGKILL when killing processes. Signals "
+"can be specified either by name (e.g., B<-HUP>) or by number (e.g., "
+"B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr ""
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "Tilføj brugernavnet for procesejeren til hver PID."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid ""
+"Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, "
+"USER and COMMAND are similar to B<ps>. ACCESS shows how the process "
+"accesses the file. Verbose mode will also show when a particular file is "
+"being accessed as a mount point, knfs export or swap file. In this case "
+"B<kernel> is shown instead of the PID."
+msgstr ""
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "Vis versionsinformation."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid ""
+"Search only for IPv4 sockets. This option must not be used with the B<-6> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid ""
+"Search only for IPv6 sockets. This option must not be used with the B<-4> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"Søg kun efter IPv5-sokler. Dette tilvalg må ikke bruges med tilvalget B<-4> "
+"og har kun en effekt med tcp- og udp-navnerum."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "FILER"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "placering af proc-filsystemet"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "EKSEMPLER"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr "dræber alle proceser der tilgår filsystemet /home på enhver måde."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<kommando>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "igangsætter I<kommando> hvis ingen anden proces bruger /dev/ttyS1."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "viser alle processer på (lokal) TELNET-porten."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "BEGRÆSNINGER"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid ""
+"Processes accessing the same file or file system several times in the same "
+"way are only shown once."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid ""
+"If the same object is specified several times on the command line, some of "
+"those entries may be ignored."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid ""
+"B<fuser> may only be able to gather partial information unless run with "
+"privileges. As a consequence, files opened by processes belonging to other "
+"users may not be listed and executables may be classified as mapped only."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid ""
+"B<fuser> cannot report on any processes that it doesn't have permission to "
+"look at the file descriptor table for. The most common time this problem "
+"occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-"
+"root user. In this case B<fuser> will report no access."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid ""
+"Installing B<fuser> SUID root will avoid problems associated with partial "
+"information, but may be undesirable for security and privacy reasons."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid ""
+"B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched "
+"with kernels older than 1.3.78."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid ""
+"The B<-k> option only works on processes. If the user is the kernel, "
+"B<fuser> will print an advice, but take no action beyond that."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid ""
+"B<fuser> will not see block devices mounted by processes in a different "
+"mount namespace. This is due to the device ID shown in the process' file "
+"descriptor table being from the process namespace, not fuser's; meaning it "
+"won't match."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "FEJL"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid ""
+"B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, "
+"even if you don't have that device configured. There may be other devices "
+"it does this for too."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid ""
+"The mount B<-m> option will match any file within the same device as the "
+"specified file, use the B<-M> option as well if you mean to specify only the "
+"mount point."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid ""
+"B<fuser> will not match mapped files, such as a process' shared libraries if "
+"they are on a B<btrfs>(5) filesystem due to the device IDs being different "
+"for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "SE OGSÃ…"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+#, fuzzy
+#| msgid ""
+#| "B<kill>(1), B<killall>(1), B<lsof>(8), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgid ""
+"B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), "
+"B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr ""
+"B<kill>(1), B<killall>(1), B<lsof>(8), B<pkill>(1), B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, fuzzy, no-wrap
+#| msgid "2021-06-21"
+msgid "2023-06-17"
+msgstr "21. juni 2021"
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall - dræb processer efter navn"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid ""
+"B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --"
+"user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<name> ..."
+msgstr ""
+"B<killall> [B<-Z>,B<\\ --context> I<mønster>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TID>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --"
+"user> I<bruger>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<TID>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<navn> ..."
+
+#. type: Plain text
+#: ../doc/killall.1:41
+#, fuzzy
+#| msgid "B<killall> B<-V>,B<\\ --version>"
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid ""
+"B<killall> sends a signal to all processes running any of the specified "
+"commands. If no signal name is specified, SIGTERM is sent."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:58
+msgid ""
+"Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or "
+"by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid ""
+"If the command name is not regular expression (option B<-r>) and contains a "
+"slash (B</>), processes executing that particular file will be selected for "
+"killing, independent of their name."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid ""
+"B<killall> returns a zero return code if at least one process has been "
+"killed for each listed command, or no commands were listed and at least one "
+"process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-"
+"zero otherwise."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid ""
+"A B<killall> process never kills itself (but may kill other B<killall> "
+"processes)."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid ""
+"Require an exact match for very long names. If a command name is longer "
+"than 15 characters, the full name may be unavailable (i.e. it is swapped "
+"out). In this case, B<killall> will kill everything that matches within the "
+"first 15 characters. With B<-e>, such entries are skipped. B<killall> "
+"prints a message for each skipped entry if B<-v> is specified in addition to "
+"B<-e>."
+msgstr ""
+"Kræver et præcist match for meget lange navne. Hvis et kommandonavn er "
+"længere end 15 tegn, så kan det fulde navn være utilgængeligt (dvs. det "
+"skiftes ud). I dette tilfælde vil B<killall> dræbe alt der matcher indenfor "
+"de første 15 tegn. Med B<-e>, udelades sådanne elementer. B<killall> "
+"udskriver en besked for hvert udeladt element hvis B<-v> er specificeret "
+"udover B<-e>."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "Udfør ikke-versalfølsom match af procesnavn."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid ""
+"Kill the process group to which the process belongs. The kill signal is "
+"only sent once per group, even if multiple processes belonging to the same "
+"process group were found."
+msgstr ""
+"Dræb procesgruppen hvortil processen tilhører. Dræb-signalet sendes kun en "
+"gang per gruppe, selv hvis flere processer tilhørende den samme procesgruppe "
+"blev fundet."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "Spørg interaktivt om bekræftelse før der dræbes."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+#, fuzzy
+msgid ""
+"Match against the PID namespace of the given PID. The default is to match "
+"against all namespaces."
+msgstr "match processer som tilhører det samme navnerum som PID"
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+#, fuzzy
+msgid ""
+"Match only processes that are older (started before) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr "dræb processer ældre end TID"
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "Udskriv ikke reklamationer, hvis ingen processer blev dræbt."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid ""
+"Interpret process name pattern as a POSIX extended regular expression, per "
+"B<regex>(3)."
+msgstr ""
+"Fortolk procesnavnmønster som et POSIX-udvidet regulært udtryk, per "
+"B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "Send dette signal i stedet for SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid ""
+"Kill only processes the specified user owns. Command names are optional."
+msgstr ""
+"Dræb kun processer, den specificerede bruger ejer. Kommandonavne er valgfrie."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "Rapporter hvis signalet blev sendt med succes."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+#, fuzzy
+msgid ""
+"Wait for all killed processes to die. B<killall> checks once per second if "
+"any of the killed processes still exist and only returns if none are left. "
+"Note that B<killall> may wait forever if the signal was ignored, had no "
+"effect, or if the process stays in zombie state."
+msgstr "vent på at processer dør"
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+#, fuzzy
+msgid ""
+"Match only processes that are younger (started after) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr "dræb processer yngre end TID"
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+#, fuzzy
+msgid ""
+"Specify security context: kill only processes having security context that "
+"match with given extended regular expression pattern. Must precede other "
+"arguments on the command line. Command names are optional."
+msgstr "dræb kun proces(ser) som har kontekst (skal stå før andre argumenter)"
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "KENDTE FEJL"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid ""
+"Killing by file only works for executables that are kept open during "
+"execution, i.e. impure executables can't be killed this way."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid ""
+"Be warned that typing B<killall> I<name> may not have the desired effect on "
+"non-Linux systems, especially when done by a privileged user."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid ""
+"B<killall -w> doesn't detect if a process disappears and is replaced by a "
+"new process with the same PID between scans."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid ""
+"If processes change their name, B<killall> may not be able to match them "
+"correctly."
+msgstr ""
+"Hvis processer ændrer deres navn, så kan B<killall> måske ikke matche dem "
+"korrekt."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid ""
+"B<killall> has a limit of names that can be specified on the command line. "
+"This figure is the size of an unsigned long integer multiplied by 8. For "
+"most 32 bit systems the limit is 32 and similarly for a 64 bit system the "
+"limit is usually 64."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+msgstr ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "01-12-2021"
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid ""
+"B<peekfd> attaches to a running process and intercepts all reads and writes "
+"to file descriptors. You can specify the desired file descriptor numbers or "
+"dump all of them."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid ""
+"Also dump the requested file descriptor activity in any new child processes "
+"that are created."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid ""
+"Remove duplicate read/writes from the output. If you're looking at a tty "
+"with echo, you might want this."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "Vis en versionstreng."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "Viser hjælpetekst og stopper."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid ""
+"Not used but useful for the user to look at to get good file descriptor "
+"numbers."
+msgstr ""
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "MILJØ"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr ""
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTIK"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr ""
+
+# Literally taken from the psmisc UI translation
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Fejl ved tilslutning til pid >I<E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid ""
+"An unknown error occurred while attempted to attach to a process, you may "
+"need to be root."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid ""
+"Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr ""
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "FORFATTER"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "09-09-2020"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "Linux\""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "Brugermanualen for Linux"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog - rapporter nuværende logsti for en proces"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<PID> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr ""
+"Kommandoen B<pslog> rapporterer de nuværende arbejdslogge for en proces."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. "
+"Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr ""
+"Vito Mule’ E<.MT mulevito@gmail.com> E<.ME> skrev B<pslog> i 2015. Send "
+"venligst fejlrapporter til E<.MT mulevito@gmail.com> E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat - vis statistikken for en proces"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid ""
+"B<prtstat> prints the statistics of the specified process. This information "
+"comes from the B</proc/>I<pid>B</stat> file."
+msgstr ""
+"B<prtstat> viser statistikken for den specificerede proces. Denne "
+"information kommer fra filen B</proc/>I<pid>B</stat>."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "Vis informationen i formatet raw (rå)."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "Vis versionsinformationen for B<prtstat>."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<PID>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "kilden for informationen brugt af B<prtstat>."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "21. juni 2021"
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-"
+"n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid ""
+"B<pstree> shows running processes as a tree. The tree is rooted at either "
+"I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all "
+"process trees rooted at processes owned by that user are shown."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid ""
+"B<pstree> visually merges identical branches by putting them in square "
+"brackets and prefixing them with the repetition count, e.g."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "bliver"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid ""
+"Child threads of a process are found under the parent process and are shown "
+"with the process name in curly braces, e.g."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid ""
+"If B<pstree> is called as B<pstree.x11> then it will prompt the user at the "
+"end of the line to press return and will not return until that has "
+"happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid ""
+"Certain kernel or mount parameters, such as the I<hidepid> option for "
+"procfs, will hide information for some processes. In these situations "
+"B<pstree> will attempt to build the tree without this information, showing "
+"process names as question marks."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid ""
+"Show command line arguments. If the command line of a process is swapped "
+"out, that process is shown in parentheses. B<-a> implicitly disables "
+"compaction for processes but not threads."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid ""
+"Disable compaction of identical subtrees. By default, subtrees are "
+"compacted whenever possible."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid ""
+"Color the process name by given attribute. Currently B<pstree> only accepts "
+"the value B<age> which colors by process age. Processes newer than 60 "
+"seconds are green, newer than an hour yellow and the remaining red."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid ""
+"Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses "
+"after each process name. If both PIDs and PGIDs are displayed then PIDs are "
+"shown first."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid ""
+"Highlight the current process and its ancestors. This is a no-op if the "
+"terminal doesn't support highlighting or if neither the current process nor "
+"any of its ancestors are in the subtree being shown."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid ""
+"Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, "
+"B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid ""
+"Display long lines. By default, lines are truncated to either the COLUMNS "
+"environment variable or the display width. If neither of these methods "
+"work, the default of 132 columns is used."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid ""
+"Sort processes with the same parent by PID instead of by name. (Numeric "
+"sort.)"
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid ""
+"Show individual trees for each namespace of the type specified. The "
+"available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, "
+"I<uts>. Regular users don't have access to other users' processes "
+"information, so the output will be limited."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid ""
+"Show PIDs. PIDs are shown as decimal numbers in parentheses after each "
+"process name. B<-p> implicitly disables compaction."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "Vis overprocesser for den specificerede proces."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid ""
+"Show namespaces transitions. Like B<-N>, the output is limited when running "
+"as a regular user."
+msgstr ""
+"Vis navnerumsovergange. Som B<-N>, resultatet er begrænset når der afvikles "
+"som en normal bruger."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "Vis fulde navne for tråde når tilgængelig."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "Skjul tråde og vis kun processer."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid ""
+"Show uid transitions. Whenever the uid of a process differs from the uid of "
+"its parent, the new uid is shown in parentheses after the process name."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid ""
+"Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, "
+"UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with "
+"B<echo -e '\\033%@'>."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid ""
+"Show the current security attributes of the process. For SELinux systems "
+"this will be the security context."
+msgstr ""
+"Vis de nuværende sikkerhedsattributter for processen. For SELinux-systemer "
+"vil dette være sikkerhedskonteksten."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "Nogle tegnsæt kan være inkompatible med VT100-tegnene."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
+
+#, no-wrap
+#~ msgid "B<->"
+#~ msgstr "B<->"
+
+#~ msgid "Reset all options and set the signal back to SIGKILL."
+#~ msgstr "nulstil alle tilvalg og sæt signalet tilbage til SIGKILL."
+
+#, no-wrap
+#~ msgid "2021-01-11"
+#~ msgstr "11-01-2021"
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
diff --git a/man-po/da/prtstat.1 b/man-po/da/prtstat.1
new file mode 100644
index 0000000..b85c0ad
--- /dev/null
+++ b/man-po/da/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 09\-09\-2020 psmisc Brugerkommandoer
+.SH NAVN
+prtstat \- vis statistikken for en proces
+.SH SYNOPSIS
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH BESKRIVELSE
+\fBprtstat\fP viser statistikken for den specificerede proces. Denne
+information kommer fra filen \fB/proc/\fP\fIpid\fP\fB/stat\fP.
+.SH TILVALG
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+Vis informationen i formatet raw (rå).
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+Vis versionsinformationen for \fBprtstat\fP.
+.SH FILER
+.TP
+\fB/proc/\fP\fIPID\fP\fB/stat\fP
+kilden for informationen brugt af \fBprtstat\fP.
diff --git a/man-po/da/pslog.1 b/man-po/da/pslog.1
new file mode 100644
index 0000000..cae3c3c
--- /dev/null
+++ b/man-po/da/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 09\-09\-2020 Linux\(dq "Brugermanualen for Linux"
+.SH NAVN
+pslog \- rapporter nuværende logsti for en proces
+.SH SYNOPSIS
+.ad l
+\fBpslog\fP \fIPID\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH BESKRIVELSE
+Kommandoen \fBpslog\fP rapporterer de nuværende arbejdslogge for en proces.
+.SH TILVALG
+.TP
+\fB\-V\fP
+Vis versionsinformation.
+.SH "SE OGSÃ…"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH FORFATTER
+Vito Mule’
+.MT mulevito@gmail.com
+.ME
+skrev \fBpslog\fP i 2015. Send
+venligst fejlrapporter til
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/de.po b/man-po/de.po
new file mode 100644
index 0000000..75bc642
--- /dev/null
+++ b/man-po/de.po
@@ -0,0 +1,1355 @@
+# German translations for psmisc-man package
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Copyright © of this file:
+# Mario Blättermann <mario.blaettermann@gmail.com>, 2019, 2021-2022, 2024.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.7-rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2024-02-13 17:37+0100\n"
+"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 23.08.4\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr "2. November 2022"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "Dienstprogramme für Benutzer"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "BEZEICHNUNG"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser - Prozesse anhand von Dateien oder Sockets identifizieren"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "ÃœBERSICHT"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<Namensraum>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<Name> …"
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "BESCHREIBUNG"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid "B<fuser> displays the PIDs of processes using the specified files or file systems. In the default display mode, each file name is followed by a letter denoting the type of access:"
+msgstr "B<fuser> zeigt anhand der angegebenen Dateien oder Dateisysteme die Kennungen (PIDs) eines Prozesses an. Im Standard-Anzeigemodus folgt jedem Dateinamen ein Buchstabe, der den Zugriffstyp angibt:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "bezeichnet das aktuelle Verzeichnis."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "bezeichnet das laufende ausführbare Programm."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "bezeichnet die geöffnete Datei. B<f> wird im Standard-Anzeigemodus weggelassen."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr "bezeichnet die zum Schreiben geöffnete Datei. B<F> wird im Standard-Anzeigemodus weggelassen."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "bezeichnet das Wurzelverzeichnis."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "zugewiesene Datei oder Laufzeitibliothek."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr "ist ein Platzhalter, der im Standard-Anzeigemodus weggelassen wird."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid "B<fuser> returns a non-zero return code if none of the specified files is accessed or in case of a fatal error. If at least one access has been found, B<fuser> returns zero."
+msgstr "B<fuser> gibt einen von Null verschiedenen Wert zurück, wenn auf keine der angegebenen Dateien zugegriffen wurde oder wenn ein schwerwiegender Fehler aufgetreten ist. Wenn mindestens ein Zugriff gefunden wurde, gibt B<fuser> Null zurück."
+
+# FIXME default, behavior → default behavior
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid "In order to look up processes using TCP and UDP sockets, the corresponding name space has to be selected with the B<-n> option. By default B<fuser> will look in both IPv6 and IPv4 sockets. To change the default behavior, use the B<-4> and B<-6> options. The socket(s) can be specified by the local and remote port, and the remote address. All fields are optional, but commas in front of missing fields must be present:"
+msgstr "Um nach Prozessen anhand von TCP- und UDP-Sockets suchen zu können, muss der entsprechende Namensraum mit der Option B<-n> angegeben werden. Standardmäßig schaut B<fuser> sowohl in IPv6- als auch IPv4-Sockets. Um das Standardverhalten zu ändern, verwenden Sie die Optionen B<-4> und B<-6>. Der oder die Socket(s) können anhand des lokalen und fernen Ports und der fernen Adresse angegeben werden. Alle Felder sind optional, aber Kommata vor den fehlenden Feldern müssen vorhanden sein:"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<lcl_Port>][,[I<ferner_Host>][,[I<ferner_Port>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid "Either symbolic or numeric values can be used for IP addresses and port numbers."
+msgstr "Für die IP-Adressen und Portnummern können entweder symbolische oder numerische Werte verwendet werden."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid "B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr "B<fuser> schreibt nur die PIDs in die Standardausgabe, alles andere wird in die Standardfehlerausgabe geschrieben."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "OPTIONEN"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid "Show all files specified on the command line. By default, only files that are accessed by at least one process are shown."
+msgstr "zeigt alle in der Befehlszeile angegebenen Dateien an. Standardmäßig werden nur Dateien angezeigt, auf die mindestens ein Prozess zugreift."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+# FIXME option formatting
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "ist gleichbedeutend mit der Option B<-m> (für POSIX-Kompatibilität)."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "wird stillschweigend ignoriert (für POSIX-Kompatibilität)."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid "Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, SIGKILL is sent. An B<fuser> process never kills itself, but may kill other B<fuser> processes. The effective user ID of the process executing B<fuser> is set to its real user ID before attempting to kill."
+msgstr "tötet Prozesse, die auf die Datei zugreifen. Das Signal SIGKILL wird gesendet, es sei denn, Sie ändern es mit B<->I<SIGNAL\\/>. Ein B<fuser>-Prozess tötet sich niemals selbst, könnte aber von anderen B<fuser>-Prozessen getötet werden. Die effektive Benutzerkennung (UID) des Prozesses, der B<fuser> ausführt, wird auf dessen reale Benutzerkennung gesetzt, bevor die Tötung versucht wird."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid "Ask the user for confirmation before killing a process. This option is silently ignored if B<-k> is not present too."
+msgstr "bittet den Benutzer um Bestätigung, bevor ein Prozess getötet wird. Diese Option wird stillschweigend ignoriert, wenn nicht auch die Option B<-k> angegeben ist."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid "For the name space B<file> let all comparisons be based on the inodes of the specified file(s) and never on the file names even on network based file systems."
+msgstr "bewirkt, dass für den Namensraum B<file> alle Vergleiche auf den oder die Inode(s) der angegebenen Datei oder Dateien und nicht auf die Dateinamen bezogen werden, selbst wenn sich diese auf netzwerkbasierten Dateisystemen befinden."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "listet alle bekannten Signalnamen auf."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< NAME>, B<--mount >I<NAME>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid "I<NAME> specifies a file on a mounted file system or a block device that is mounted. All processes accessing files on that file system are listed. If a directory is specified, it is automatically changed to I<NAME>/ to use any file system that might be mounted on that directory."
+msgstr "bezeichnet eine Datei auf einem eingehängten Dateisystem oder einem blockorientierten Gerät, das eingehängt ist. Alle Prozesse, die auf Dateien auf diesem Dateisystem zugreifen, werden aufgelistet. Falls ein Verzeichnis angegeben ist, wird es automatisch in I<NAME>/ geändert, um jedes Dateisystem zu verwenden, das in diesem Verzeichnis eingehängt sein könnte."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid "Request will be fulfilled only if I<NAME> specifies a mountpoint. This is an invaluable seat belt which prevents you from killing the machine if I<NAME> happens to not be a filesystem."
+msgstr "erfüllt die Anforderung nur dann, wenn der I<NAME> einen Einhängepunkt bezeichnet. Dies ist ein sehr wertvoller Sicherheitsmechanismus, der Sie daran hindert, den gesamten Rechner zu töten, falls der I<NAME> kein Dateisystem bezeichnen sollte."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid "Kill only processes which have write access. This option is silently ignored if B<-k> is not present too."
+msgstr "tötet nur Prozesse, die Schreibzugriff haben. Diese Option wird stillschweigend ignoriert, wenn nicht auch die Option B<-k> angegeben ist."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< NAMENSRAUM>, B<--namespace >I<NAMENSRAUM>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid "Select a different name space. The name spaces B<file> (file names, the default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are supported. For ports, either the port number or the symbolic name can be specified. If there is no ambiguity, the shortcut notation I<name>B</>I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr "wählt einen anderen Namensraum. Die Namensräume B<file> (Dateinamen, die Voreinstellung), B<udp> (lokale UDP-Ports) und B<tcp> (lokale TCP-Ports) werden unterstützt. Für Ports kann entweder die Portnummer oder der symbolische Name angegeben werden. Auch die Kurznotation I<Name>B</>I<Namensraum> (zum Beispiel I<80>B</>I<tcp>) kann verwendet werden, falls dadurch keine Mehrdeutigkeiten entstehen."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid "Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not be used with B<-s>."
+msgstr "aktiviert den stillen Modus. Die Optionen B<-u> und B<-v> werden in diesem Modus ignoriert. Die Option B<-a> darf nicht zusammen mit B<-s> verwendet werden."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid "Use the specified signal instead of SIGKILL when killing processes. Signals can be specified either by name (e.g., B<-HUP>) or by number (e.g., B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr "verwendet beim Töten von Prozessen das angegebene Signal anstelle von SIGKILL. Signale können entweder als Name (zum Beispiel B<-HUP>) oder als Nummer (zum Beispiel B<-1>) angegeben werden. Diese Option wird stillschweigend ignoriert, wenn die Option B<-k> nicht angegeben ist."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "hängt den Benutzernamen des Eigentümers jedes Prozesses an jede PID an."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid "Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, USER and COMMAND are similar to B<ps>. ACCESS shows how the process accesses the file. Verbose mode will also show when a particular file is being accessed as a mount point, knfs export or swap file. In this case B<kernel> is shown instead of the PID."
+msgstr "aktiviert den ausführlichen Modus. Prozesse werden ähnlich wie in B<ps> angezeigt. Die Felder PID, BEN. und BEFEHL sind ähnlich zu B<ps>. ZUGR. zeigt, wie der Prozess auf die Datei zugreift. Im ausführlichen Modus wird auch angezeigt, wann auf eine bestimmte Datei als Einhängepunkt, Knfs-Export oder Auslagerungsdatei zugegriffen wird. In diesem Fall wird B<kernel> anstelle der PID angezeigt."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "zeigt Versionsinformationen an."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid "Search only for IPv4 sockets. This option must not be used with the B<-6> option and only has an effect with the tcp and udp namespaces."
+msgstr "sucht nur nach IPv4-Sockets. Diese Option darf nicht zusammen mit der Option B<-6> verwendet werden und ist nur mit den TCP- und UDP-Namensräumen wirksam."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid "Search only for IPv6 sockets. This option must not be used with the B<-4> option and only has an effect with the tcp and udp namespaces."
+msgstr "sucht nur nach IPv6-Sockets. Diese Option darf nicht zusammen mit der Option B<-4> verwendet werden und ist nur mit den TCP- und UDP-Namensräumen wirksam."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "DATEIEN"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "Ort des /proc-Dateisystems"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "BEISPIELE\t"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr "tötet alle Prozesse, die auf das Dateisystem /home in irgendeiner Weise zugreifen."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<Befehl>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "ruft den angegebenen I<Befehl> auf, falls kein anderer Prozess /dev/ttyS1 nutzt."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "zeigt alle Prozesse am (lokalen) TELNET-Port."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "EINSCHRÄNKUNGEN"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid "Processes accessing the same file or file system several times in the same way are only shown once."
+msgstr "Prozesse, die auf die gleiche Datei oder das gleiche Dateisystem mehrmals auf die gleiche Weise zugreifen, werden nur einmal angezeigt."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid "If the same object is specified several times on the command line, some of those entries may be ignored."
+msgstr "Falls das gleiche Objekt in der Befehlszeile mehrmals angegeben ist, können einige von dessen Einträgen ignoriert werden."
+
+# CHECK mapped
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid "B<fuser> may only be able to gather partial information unless run with privileges. As a consequence, files opened by processes belonging to other users may not be listed and executables may be classified as mapped only."
+msgstr "B<fuser> könnte lediglich in der Lage sein, Teilinformationen zu ermitteln, es sei denn, es wird mit höheren Privilegien ausgeführt. Als Konsequenz könnten Dateien, die durch Prozesse anderer Benutzer geöffnet wurden nicht aufgelistet und ausführbare Programme nicht als zugewiesen klassifiziert werden."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid "B<fuser> cannot report on any processes that it doesn't have permission to look at the file descriptor table for. The most common time this problem occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-root user. In this case B<fuser> will report no access."
+msgstr "B<fuser> kann nicht auf Prozessen agieren, für die es keine Zugriffsrechte auf die Dateideskriptortabelle hat. Am häufigsten tritt dieses Problem beim Suchen nach TCP- oder UDP-Sockets auf, wenn B<fuser> nicht mit Root-Rechten ausgeführt wird. In diesem Fall meldet B<fuser> keinen Zugriff."
+
+# CHECK suid root
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid "Installing B<fuser> SUID root will avoid problems associated with partial information, but may be undesirable for security and privacy reasons."
+msgstr "Die Installation von B<fuser> SUID root wird Probleme vermeiden, die auf unvollständige Informationen zurückzuführen sind, aber könnte aus Sicherheitsgründen und zum Schutz der Privatsphäre unerwünscht sein."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid "B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched with kernels older than 1.3.78."
+msgstr "B<udp>- und B<tcp>-Namensräume sowie UNIX-Domain-Sockets können mit einem Kernel älter als Version 1.3.78 nicht durchsucht werden."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "Zugriffe durch den Kernel werden nur mit der Option B<-v> angezeigt."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid "The B<-k> option only works on processes. If the user is the kernel, B<fuser> will print an advice, but take no action beyond that."
+msgstr "Die Option B<-k> agiert nur auf Prozessen. Falls der Benutzer der Kernel ist, gibt B<fuser> einen Hinweis aus, führt darüber hinaus aber keine Aktion aus."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid "B<fuser> will not see block devices mounted by processes in a different mount namespace. This is due to the device ID shown in the process' file descriptor table being from the process namespace, not fuser's; meaning it won't match."
+msgstr "B<fuser> wird keine blockorientierten Geräte sehen können, die von Prozessen in einem anderen Einhängenamensraum eingehängt wurden. Das kommt daher, weil die in der Dateideskriptortabelle sichtbare Gerätekennung aus dem Prozessnamensraum stammt, nicht aus dem von B<fuser>."
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "FEHLER"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid "B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, even if you don't have that device configured. There may be other devices it does this for too."
+msgstr "Der Befehl B<fuser -m /dev/sgX> zeigt alle Prozesse an (oder tötet diese, wenn die Option B<-k> angegeben ist), selbst dann, wenn Sie das Gerät nicht eingerichtet haben. Es könnte weitere Geräte geben, bei denen dies getan wird."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid "The mount B<-m> option will match any file within the same device as the specified file, use the B<-M> option as well if you mean to specify only the mount point."
+msgstr "Die Option B<-m> von B<mount> erkennt jede Datei innerhalb eines Geräts als die von Ihnen angegebene Datei; verwenden Sie zusätzlich die Option B<-M>, um zu verdeutlichen, dass Sie nur den Einhängepunkt angeben."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid "B<fuser> will not match mapped files, such as a process' shared libraries if they are on a B<btrfs>(5) filesystem due to the device IDs being different for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr "B<fuser> wird zugewiesene Dateien nicht als Übereinstimmung sehen, beispielsweise die gemeinsam genutzten Bibliotheken eines Prozesses, wenn diese sich auf einem B<btrfs>(5)-Dateisystem befinden, da die Gerätekennungen für B<stat>(2) und I</proc/E<lt>PIDE<gt>/maps> unterschiedlich sind."
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "SIEHE AUCH"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+msgid "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "2023-06-17"
+msgstr "17. Juni 2023"
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall - Prozesse anhand des Namens töten"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid "B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<name> ..."
+msgstr "B<killall> [B<-Z>,B<\\ --context> I<Muster>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<ZEIT>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --user> I<Benutzer>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<ZEIT>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<Name> …"
+
+#. type: Plain text
+#: ../doc/killall.1:41
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-l>, B<--list>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid "B<killall> sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent."
+msgstr "B<killall> sendet ein Signal an alle Prozesse, die mit dem angegebenen Befehl gestartet wurden. Wenn kein Signalname angegeben ist, wird das Signal SIGTERM gesendet."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+msgid "Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr "Signale können entweder als Name (zum Beispiel B<-HUP> oder B<-SIGHUP>), als Nummer (zum Beispiel B<-1>) oder durch die Option B<-s> angegeben werden."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid "If the command name is not regular expression (option B<-r>) and contains a slash (B</>), processes executing that particular file will be selected for killing, independent of their name."
+msgstr "Falls der Befehlsname kein regulärer Ausdruck ist (Option B<-r>) und einen Schrägstrich (B</>) enthält, werden Prozesse, welche diese bestimmte Datei ausführen, zum Töten vorgesehen, unabhängig von deren Namen."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid "B<killall> returns a zero return code if at least one process has been killed for each listed command, or no commands were listed and at least one process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-zero otherwise."
+msgstr "B<killall> gibt den Code 0 zurück, falls für jeden der aufgelisteten Befehle mindestens ein Prozess getötet wurde, oder es waren keine Befehle aufgelistet und mindestens ein Prozess entsprach den mit B<-u> und B<-Z> angegebenen Suchkriterien. B<killall> gibt anderenfalls einen von Null verschiedenen Wert zurück."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid "A B<killall> process never kills itself (but may kill other B<killall> processes)."
+msgstr "Ein B<killall>-Prozess tötet sich niemals selbst (aber könnte von anderen B<killall>-Prozessen getötet werden)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid "Require an exact match for very long names. If a command name is longer than 15 characters, the full name may be unavailable (i.e. it is swapped out). In this case, B<killall> will kill everything that matches within the first 15 characters. With B<-e>, such entries are skipped. B<killall> prints a message for each skipped entry if B<-v> is specified in addition to B<-e>."
+msgstr "verlangt eine exakte Übereinstimmung für sehr lange Namen. Falls der Befehlsname länger als 15 Zeichen ist, könnte der vollständige Name nicht verfügbar sein (das heißt, er ist ausgelagert). In diesem Fall tötet B<killall> alles, was mit den ersten 15 Zeichen übereinstimmt. Mit B<-e> werden solche Einträge übersprungen. B<killall> gibt eine Meldung für jeden übersprungenen Eintrag aus, falls B<-v> zusätzlich zu B<-e> angegeben wird."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "ignoriert bei der Treffersuche die Groß- oder Kleinschreibung."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid "Kill the process group to which the process belongs. The kill signal is only sent once per group, even if multiple processes belonging to the same process group were found."
+msgstr "tötet die Prozessgruppe, zu welcher der Prozess gehört. Das Tötungssignal wird nur einmal pro Gruppe gesendet, selbst wenn in der Prozessgruppe mehrere Prozesse gefunden wurden."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "bittet vor dem Töten interaktiv um Bestätigung."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid "Match against the PID namespace of the given PID. The default is to match against all namespaces."
+msgstr "prüft anhand des PID-Namensraums der angegebenen PID auf Übereinstimmungen. Standardmäßig wird die Überprüfung auf alle Namensräume bezogen."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid "Match only processes that are older (started before) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr "prüft nur Prozesse auf Übereinstimmungen, die älter als die angegebene Zeit sind, also vorher gestartet wurden. Die Zeit wird als Fließkommazahl mit angehängter Einheit angegeben. Die Einheiten sind s, m, h, d, w, M, y für Sekunden, Minuten, Stunden, Tage, Wochen, Monate beziehungsweise Jahre."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "beschwert sich nicht, falls keine Prozesse getötet wurden."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid "Interpret process name pattern as a POSIX extended regular expression, per B<regex>(3)."
+msgstr "interpretiert das Prozessnamensmuster als erweiterten regulären POSIX-Ausdruck gemäß B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "sendet dieses Signal anstelle von SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid "Kill only processes the specified user owns. Command names are optional."
+msgstr "tötet nur Prozesse, die dem angegebenen Benutzer gehören. Befehlsnamen sind optional."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "meldet, wenn das Signal erfolgreich gesendet wurde."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid "Wait for all killed processes to die. B<killall> checks once per second if any of the killed processes still exist and only returns if none are left. Note that B<killall> may wait forever if the signal was ignored, had no effect, or if the process stays in zombie state."
+msgstr "wartet auf die Beendigung aller getöteten Prozesse. B<killall> prüft einmal pro Sekunde, ob irgendeiner der getöteten Prozesse noch existiert und liefert nur ein Ergebnis, falls keine Prozesse mehr verblieben sind. Beachten Sie, dass B<killall> unbegrenzt warten könnte, falls das Signal ignoriert wurde, unwirksam war oder der Prozess in einen Zombie-Zustand übergegangen ist."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+# FIXME Months → month
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid "Match only processes that are younger (started after) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr "prüft nur Prozesse auf Übereinstimmungen, die neuer als die angegebene Zeit sind, also später gestartet wurden. Die Zeit wird als Fließkommazahl mit angehängter Einheit angegeben. Die Einheiten sind s, m, h, d, w, M, y für Sekunden, Minuten, Stunden, Tage, Wochen, Monate beziehungsweise Jahre."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid "Specify security context: kill only processes having security context that match with given extended regular expression pattern. Must precede other arguments on the command line. Command names are optional."
+msgstr "gibt den Sicherheitskontext an: Es werden nur Prozesse getötet, deren Sicherheitskontext dem des Musters des angegebenen erweiterten regulären Ausdrucks entspricht. Dies muss anderen Argumenten in der Befehlszeile vorangestellt werden. Befehlsnamen sind optional."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "BEKANNTE FEHLER"
+
+# CHECK impure
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid "Killing by file only works for executables that are kept open during execution, i.e. impure executables can't be killed this way."
+msgstr "Das Töten anhand des Dateinamens funktioniert nur für ausführbare Programme, die während der Ausführung offen gehalten werden, das heißt, unsaubere ausführbare Programme können auf diese Weise nicht getötet werden."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid "Be warned that typing B<killall> I<name> may not have the desired effect on non-Linux systems, especially when done by a privileged user."
+msgstr "Seien Sie vorsichtig, wenn Sie B<killall> I<Name> eingeben, weil dies auf Nicht-Linux-Systemen nicht die gewünschte Wirkung haben könnte, insbesondere dann, wenn Sie es als privilegierter Benutzer ausführen."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid "B<killall -w> doesn't detect if a process disappears and is replaced by a new process with the same PID between scans."
+msgstr "B<killall -w> erkennt in aufeinanderfolgenden Übrprüfungen nicht, ob ein Prozess beendet ist und durch einen Prozess mit der gleichen PID ersetzt wurde."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid "If processes change their name, B<killall> may not be able to match them correctly."
+msgstr "Falls Prozesse ihren Namen ändern, könnte B<killall> diese nicht korrekt erkennen."
+
+# FIXME unsigned long → unsigned long integer?
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid "B<killall> has a limit of names that can be specified on the command line. This figure is the size of an unsigned long integer multiplied by 8. For most 32 bit systems the limit is 32 and similarly for a 64 bit system the limit is usually 64."
+msgstr "Für B<killall> gibt es eine Begrenzung für die Namen, die in der Befehlszeile angegeben werden können. Dies ist die Größe einer vorzeichenlosen Ganzzahl, multipliziert mit 8. Für die meisten 32-Bit-Systeme ist 32 die Begrenzung, analog dazu ist sie bei 64-Bit-Systemen üblicherweise auf 64 begrenzt."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<regex>(3)."
+msgstr "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "1. Dezember 2021"
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr "peekfd - nach Dateideskriptoren laufender Prozesse schauen"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<PID> [I<Dateideskriptor>] [I<Dateideskriptor>] …"
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid "B<peekfd> attaches to a running process and intercepts all reads and writes to file descriptors. You can specify the desired file descriptor numbers or dump all of them."
+msgstr "B<peekfd> hängt sich an einen laufenden Prozess an und fängt alle Lese- und Schreibvorgänge von und zu Dateideskriptoren ab. Sie können die Nummern der gewünschten Dateideskriptoren angeben oder alle ausgeben lassen."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr "führt keine Nachverarbeitung der gelesenen oder geschriebenen Bytes durch."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr "zeigt keine Kopfzeilen an, welche die Quelle der ausgegebenen Bytes angeben."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid "Also dump the requested file descriptor activity in any new child processes that are created."
+msgstr "gibt auch die Aktivität des angefragten Dateideskriptors in jeglichen neu erstellten Kindprozessen aus."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid "Remove duplicate read/writes from the output. If you're looking at a tty with echo, you might want this."
+msgstr "entfernt Lese- und Schreibvorgänge aus der Ausgabe, die mehrfach erscheinen. Wenn Sie ein TTY mit Echo verwenden, werden Sie dies möglicherweise brauchen."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "zeigt eine Versionszeichenkette an."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "zeigt eine Hilfemeldung an."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid "Not used but useful for the user to look at to get good file descriptor numbers."
+msgstr "Wird nicht verwendet, aber ist für den Benutzer nützlich, um die Nummern der gewünschten Dateideskriptoren zu finden."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "UMGEBUNGSVARIABLEN"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "Keine."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSE"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr "Die folgenden Diagosen können in die Standardfehlerausgabe geschrieben werden:"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Fehler beim Anhängen an >I<E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid "An unknown error occurred while attempted to attach to a process, you may need to be root."
+msgstr "Ein unbekannter Fehler ist bei dem Versuch aufgetreten, an einen Prozess anzuhängen. Möglicherweise müssen Sie Root sein."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid "Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr "Wahrscheinlich viele. Seien Sie nicht überrascht, wenn der von Ihnen überwachte Prozess abstürzt."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "AUTOR"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "29. September 2020"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "Linux"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "Linux-Benutzerhandbuch"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog - den aktuellen Protokollpfad eines Prozesses melden"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<PID> …\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr "Der Befehl B<pslog> meldet den aktuellen Protokollpfad eines Prozesses."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid "Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr "Vito Mule’ E<.MT mulevito@gmail.com> E<.ME> schrieb B<pslog> im Jahre 2015. Bitte senden Sie Fehlerberichte (auf Englisch) an E<.MT mulevito@gmail.com> E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat - Statistiken eines Prozesses ausgeben"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<PID>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid "B<prtstat> prints the statistics of the specified process. This information comes from the B</proc/>I<pid>B</stat> file."
+msgstr "B<prtstat> gibt die Statistiken des angegebenen Prozesses aus. Die Informationen werden aus der Datei B</proc/>I<PID>B</stat> bezogen."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "gibt die Informationen im Rohformat aus."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "zeigt Versionsinformationen für B<prtstat> an."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<PID>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "gibt die Informationsquelle an, die B<prtstat> verwendet."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "21. Juni 2021"
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree - Prozesse in einer Baumansicht anzeigen"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<Attribut>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ PID>,B<\\ --highlight-pid\\ >I<PID>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<Namensraum>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<PID>,B<\\ >I<Benutzer>]"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid "B<pstree> shows running processes as a tree. The tree is rooted at either I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all process trees rooted at processes owned by that user are shown."
+msgstr "B<pstree> zeigt die laufenden Prozesse in einer Baumansicht an. Die Wurzel des Baums wird anhand der angegebenen I<PID> oder mittels B<init> gewählt, falls die I<PID> weggelassen wird. Wenn ein Benutzername angegeben wird, werden die Wurzeln aller Prozessbäume anhand der Prozesse gewählt, die diesem Benutzer gehören."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid "B<pstree> visually merges identical branches by putting them in square brackets and prefixing them with the repetition count, e.g."
+msgstr "B<pstree> führt identische Zweige visuell zusammen, indem diese in eckige Klammern gesetzt werden und ihnen die Anzahl der Wiederholungen vorangestellt wird. Zum Beispiel wird"
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "zu"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid "Child threads of a process are found under the parent process and are shown with the process name in curly braces, e.g."
+msgstr "Kind-Threads eines Prozesses werden unter dem Elternprozess angezeigt und der Prozessname in geschweifte Klammern gesetzt, zum Beispiel"
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid "If B<pstree> is called as B<pstree.x11> then it will prompt the user at the end of the line to press return and will not return until that has happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr "Falls B<pstree> als B<pstree.x11> aufgerufen wird, bittet es den Benutzer am Ende der Zeile, die Eingabetaste zu drücken und kehrt nicht zurück, bis dies geschehen ist. Dies ist nützlich, wenn B<pstree> in einem X-Terminal ausgeführt wird."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid "Certain kernel or mount parameters, such as the I<hidepid> option for procfs, will hide information for some processes. In these situations B<pstree> will attempt to build the tree without this information, showing process names as question marks."
+msgstr "Bestimmte Kernel- oder Einhängeparameter, wie die Option B<hidepid> für B<procfs>, verstecken Informationen für einige Prozesse. In diesen Situationen versucht B<pstree>, die Baumansicht ohne diese Informationen zu erstellen, wobei die Prozessnamen als Fragezeichen dargestellt werden."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid "Show command line arguments. If the command line of a process is swapped out, that process is shown in parentheses. B<-a> implicitly disables compaction for processes but not threads."
+msgstr "zeigt Befehlszeilenargumente an. Falls die Befehlszeile eines Prozesses ausgelagert ist, wird dieser Prozess in Klammern angezeigt. Die Option B<-a> deaktiviert implizit die Verdichtung für Prozesse, aber nicht für Threads."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "verwendet ASCII-Zeichen zum Darstellen des Baums."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid "Disable compaction of identical subtrees. By default, subtrees are compacted whenever possible."
+msgstr "deaktiviert die Verdichtung identischer Unterbäume. Standardmäßig werden Unterbäume verdichtet, wo immer es möglich ist."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid "Color the process name by given attribute. Currently B<pstree> only accepts the value B<age> which colors by process age. Processes newer than 60 seconds are green, newer than an hour yellow and the remaining red."
+msgstr "stellt den Prozessnamen anhand des angegebenen Attributs farbig dar. Gegenwärtig unterstützt B<pstree> nur den Wert B<age>, wodurch nach Alter des Prozesses eingefärbt wird. Prozesse, die jünger als 60 Sekunden sind, werden grün, Prozesse, die jünger als eine Stunde sind, gelb und die übrigen rot dargestellt."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid "Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses after each process name. If both PIDs and PGIDs are displayed then PIDs are shown first."
+msgstr "zeigt Prozessgruppenkennungen (PGIDs) an. Die PGIDs werden als Dezimalzahlen in Klammern nach jedem der Prozessnamen angezeigt. Falls sowohl PIDs als auch PGIDs angezeigt werden, erscheinen die PIDs zuerst."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "verwendet VT100-Zeichen zum Darstellen von Linien."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid "Highlight the current process and its ancestors. This is a no-op if the terminal doesn't support highlighting or if neither the current process nor any of its ancestors are in the subtree being shown."
+msgstr "hebt den aktuellen Prozess und dessen Elternprozess hervor. Diese Option ist unwirksam, wenn das Terminal keine Hervorhebung unterstützt oder wenn weder der aktuelle Prozess noch irgendeiner seiner Elternprozesse im Unterbaum liegen, der angezeigt wird."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid "Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr "agiert wie B<-h>, hebt aber stattdessen den angegebenen Prozess hervor. Im Gegensatz zu B<-h> schlägt B<pstree> mit B<-H> fehl, falls keine Hervorhebung verfügbar ist."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid "Display long lines. By default, lines are truncated to either the COLUMNS environment variable or the display width. If neither of these methods work, the default of 132 columns is used."
+msgstr "zeigt lange Zeilen an. Standardmäßig werden Zeilen entweder gemäß der Unmgebungsvariable COLUMN oder auf die Breite der Anzeige beschnitten. Falls keine dieser Methoden funktioniert, werden standardmäßig 132 Spalten verwendet."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid "Sort processes with the same parent by PID instead of by name. (Numeric sort.)"
+msgstr "sortiert Prozesse mit dem gleichen Elternprozess nach PID anstatt nach Namen (numerische Sortierung)."
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid "Show individual trees for each namespace of the type specified. The available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Regular users don't have access to other users' processes information, so the output will be limited."
+msgstr "zeigt individuelle Bäume für jeden Namensraum des angegebenen Typs an. Folgende Typen sind verfügbar: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Gewöhnliche Benutzer haben keinen Zugriff auf die Informationen der Prozesse anderer Benutzer, daher wird die Ausgabe eingeschränkt sein."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid "Show PIDs. PIDs are shown as decimal numbers in parentheses after each process name. B<-p> implicitly disables compaction."
+msgstr "zeigt PIDs an. Die PIDs werden als Dezimalzahlen in Klammern nach jedem der Prozessnamen angezeigt. B<-p> deaktiviert die Verdichtung implizit."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "zeigt Elternprozesse des angegebenen Prozesses an."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid "Show namespaces transitions. Like B<-N>, the output is limited when running as a regular user."
+msgstr "zeigt Namensraum-Übergänge an. Wie mit B<-N> wird die Ausgabe bei der Ausführung als gewöhnlicher Benutzer eingeschränkt."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "zeigt vollständige Namen für Threads an, sofern verfügbar."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "versteckt Threads und zeigt nur Prozesse an."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid "Show uid transitions. Whenever the uid of a process differs from the uid of its parent, the new uid is shown in parentheses after the process name."
+msgstr "zeigt UID-Übergänge an. Wann immer sich eine UID eines Prozesses von der UID seines Elternprozesses unterscheidet, wird die neue UID in Klammern nach dem Prozessnamen angezeigt."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid "Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with B<echo -e '\\033%@'>."
+msgstr "verwendet UTF-8-Zeichen (Unicode) zum Darstellen der Linien. Unter Linux 1.1-54 und neueren Versionen können Sie auf der Konsole mit B<echo -e '\\033%8'> in den UTF-8-Modus wechseln und diesen mit B<echo -e '\\033%@'> wieder verlassen."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid "Show the current security attributes of the process. For SELinux systems this will be the security context."
+msgstr "zeigt die aktuellen Sicherheitsattribute des Prozesses an. Für SELinux-Systeme wird dies der Sicherheitskontext sein."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "Einige Zeichensätze könnten zu den VT100-Zeichen inkompatibel sein."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
diff --git a/man-po/de/fuser.1 b/man-po/de/fuser.1
new file mode 100644
index 0000000..0761e6d
--- /dev/null
+++ b/man-po/de/fuser.1
@@ -0,0 +1,241 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 "2. November 2022" psmisc "Dienstprogramme für Benutzer"
+.SH BEZEICHNUNG
+fuser \- Prozesse anhand von Dateien oder Sockets identifizieren
+.SH ÃœBERSICHT
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP
+\fINamensraum\fP] [\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fISIGNAL\fP] ] \fIName\fP …
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH BESCHREIBUNG
+\fBfuser\fP zeigt anhand der angegebenen Dateien oder Dateisysteme die
+Kennungen (PIDs) eines Prozesses an. Im Standard\-Anzeigemodus folgt jedem
+Dateinamen ein Buchstabe, der den Zugriffstyp angibt:
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+bezeichnet das aktuelle Verzeichnis.
+.TP
+\fBe\fP
+bezeichnet das laufende ausführbare Programm.
+.TP
+\fBf\fP
+bezeichnet die geöffnete Datei. \fBf\fP wird im Standard\-Anzeigemodus
+weggelassen.
+.TP
+\fBF\fP
+bezeichnet die zum Schreiben geöffnete Datei. \fBF\fP wird im
+Standard\-Anzeigemodus weggelassen.
+.TP
+\fBr\fP
+bezeichnet das Wurzelverzeichnis.
+.TP
+\fBm\fP
+zugewiesene Datei oder Laufzeitibliothek.
+.TP
+\&\fB.\fP
+ist ein Platzhalter, der im Standard\-Anzeigemodus weggelassen wird.
+.PD
+.RE
+.LP
+\fBfuser\fP gibt einen von Null verschiedenen Wert zurück, wenn auf keine der
+angegebenen Dateien zugegriffen wurde oder wenn ein schwerwiegender Fehler
+aufgetreten ist. Wenn mindestens ein Zugriff gefunden wurde, gibt \fBfuser\fP
+Null zurück.
+.PP
+Um nach Prozessen anhand von TCP\- und UDP\-Sockets suchen zu können, muss der
+entsprechende Namensraum mit der Option \fB\-n\fP angegeben
+werden. Standardmäßig schaut \fBfuser\fP sowohl in IPv6\- als auch
+IPv4\-Sockets. Um das Standardverhalten zu ändern, verwenden Sie die Optionen
+\fB\-4\fP und \fB\-6\fP. Der oder die Socket(s) können anhand des lokalen und fernen
+Ports und der fernen Adresse angegeben werden. Alle Felder sind optional,
+aber Kommata vor den fehlenden Feldern müssen vorhanden sein:
+.PP
+[\fIlcl_Port\fP][,[\fIferner_Host\fP][,[\fIferner_Port\fP]]]
+.PP
+Für die IP\-Adressen und Portnummern können entweder symbolische oder
+numerische Werte verwendet werden.
+.PP
+\fBfuser\fP schreibt nur die PIDs in die Standardausgabe, alles andere wird in
+die Standardfehlerausgabe geschrieben.
+.SH OPTIONEN
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+zeigt alle in der Befehlszeile angegebenen Dateien an. Standardmäßig werden
+nur Dateien angezeigt, auf die mindestens ein Prozess zugreift.
+.TP
+\fB\-c\fP
+ist gleichbedeutend mit der Option \fB\-m\fP (für POSIX\-Kompatibilität).
+.TP
+\fB\-f\fP
+wird stillschweigend ignoriert (für POSIX\-Kompatibilität).
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+tötet Prozesse, die auf die Datei zugreifen. Das Signal SIGKILL wird
+gesendet, es sei denn, Sie ändern es mit \fB\-\fP\fISIGNAL\/\fP. Ein
+\fBfuser\fP\-Prozess tötet sich niemals selbst, könnte aber von anderen
+\fBfuser\fP\-Prozessen getötet werden. Die effektive Benutzerkennung (UID) des
+Prozesses, der \fBfuser\fP ausführt, wird auf dessen reale Benutzerkennung
+gesetzt, bevor die Tötung versucht wird.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+bittet den Benutzer um Bestätigung, bevor ein Prozess getötet wird. Diese
+Option wird stillschweigend ignoriert, wenn nicht auch die Option \fB\-k\fP
+angegeben ist.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+bewirkt, dass für den Namensraum \fBfile\fP alle Vergleiche auf den oder die
+Inode(s) der angegebenen Datei oder Dateien und nicht auf die Dateinamen
+bezogen werden, selbst wenn sich diese auf netzwerkbasierten Dateisystemen
+befinden.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+listet alle bekannten Signalnamen auf.
+.TP
+\fB\-m\fP\fI NAME\fP, \fB\-\-mount \fP\fINAME\fP
+bezeichnet eine Datei auf einem eingehängten Dateisystem oder einem
+blockorientierten Gerät, das eingehängt ist. Alle Prozesse, die auf Dateien
+auf diesem Dateisystem zugreifen, werden aufgelistet. Falls ein Verzeichnis
+angegeben ist, wird es automatisch in \fINAME\fP/ geändert, um jedes
+Dateisystem zu verwenden, das in diesem Verzeichnis eingehängt sein könnte.
+.TP
+\fB\-M\fP, \fB\-\-ismountpoint\fP
+erfüllt die Anforderung nur dann, wenn der \fINAME\fP einen Einhängepunkt
+bezeichnet. Dies ist ein sehr wertvoller Sicherheitsmechanismus, der Sie
+daran hindert, den gesamten Rechner zu töten, falls der \fINAME\fP kein
+Dateisystem bezeichnen sollte.
+.TP
+\fB\-w\fP
+tötet nur Prozesse, die Schreibzugriff haben. Diese Option wird
+stillschweigend ignoriert, wenn nicht auch die Option \fB\-k\fP angegeben ist.
+.TP
+\fB\-n\fP\fI NAMENSRAUM\fP, \fB\-\-namespace \fP\fINAMENSRAUM\fP
+wählt einen anderen Namensraum. Die Namensräume \fBfile\fP (Dateinamen, die
+Voreinstellung), \fBudp\fP (lokale UDP\-Ports) und \fBtcp\fP (lokale TCP\-Ports)
+werden unterstützt. Für Ports kann entweder die Portnummer oder der
+symbolische Name angegeben werden. Auch die Kurznotation
+\fIName\fP\fB/\fP\fINamensraum\fP (zum Beispiel \fI80\fP\fB/\fP\fItcp\fP) kann verwendet
+werden, falls dadurch keine Mehrdeutigkeiten entstehen.
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+aktiviert den stillen Modus. Die Optionen \fB\-u\fP und \fB\-v\fP werden in diesem
+Modus ignoriert. Die Option \fB\-a\fP darf nicht zusammen mit \fB\-s\fP verwendet
+werden.
+.TP
+\fB\-\fP\fISIGNAL\fP
+verwendet beim Töten von Prozessen das angegebene Signal anstelle von
+SIGKILL. Signale können entweder als Name (zum Beispiel \fB\-HUP\fP) oder als
+Nummer (zum Beispiel \fB\-1\fP) angegeben werden. Diese Option wird
+stillschweigend ignoriert, wenn die Option \fB\-k\fP nicht angegeben ist.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+hängt den Benutzernamen des Eigentümers jedes Prozesses an jede PID an.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+aktiviert den ausführlichen Modus. Prozesse werden ähnlich wie in \fBps\fP
+angezeigt. Die Felder PID, BEN. und BEFEHL sind ähnlich zu
+\fBps\fP. ZUGR. zeigt, wie der Prozess auf die Datei zugreift. Im ausführlichen
+Modus wird auch angezeigt, wann auf eine bestimmte Datei als Einhängepunkt,
+Knfs\-Export oder Auslagerungsdatei zugegriffen wird. In diesem Fall wird
+\fBkernel\fP anstelle der PID angezeigt.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+zeigt Versionsinformationen an.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+sucht nur nach IPv4\-Sockets. Diese Option darf nicht zusammen mit der Option
+\fB\-6\fP verwendet werden und ist nur mit den TCP\- und UDP\-Namensräumen
+wirksam.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+sucht nur nach IPv6\-Sockets. Diese Option darf nicht zusammen mit der Option
+\fB\-4\fP verwendet werden und ist nur mit den TCP\- und UDP\-Namensräumen
+wirksam.
+.SH DATEIEN
+.TP
+/proc
+Ort des /proc\-Dateisystems
+.SH BEISPIELE
+.TP
+\fBfuser \-km /home\fP
+tötet alle Prozesse, die auf das Dateisystem /home in irgendeiner Weise
+zugreifen.
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fIBefehl\fP\fB; fi\fP
+ruft den angegebenen \fIBefehl\fP auf, falls kein anderer Prozess /dev/ttyS1
+nutzt.
+.TP
+\fBfuser telnet/tcp\fP
+zeigt alle Prozesse am (lokalen) TELNET\-Port.
+.SH EINSCHRÄNKUNGEN
+Prozesse, die auf die gleiche Datei oder das gleiche Dateisystem mehrmals
+auf die gleiche Weise zugreifen, werden nur einmal angezeigt.
+.PP
+Falls das gleiche Objekt in der Befehlszeile mehrmals angegeben ist, können
+einige von dessen Einträgen ignoriert werden.
+.PP
+\fBfuser\fP könnte lediglich in der Lage sein, Teilinformationen zu ermitteln,
+es sei denn, es wird mit höheren Privilegien ausgeführt. Als Konsequenz
+könnten Dateien, die durch Prozesse anderer Benutzer geöffnet wurden nicht
+aufgelistet und ausführbare Programme nicht als zugewiesen klassifiziert
+werden.
+.PP
+\fBfuser\fP kann nicht auf Prozessen agieren, für die es keine Zugriffsrechte
+auf die Dateideskriptortabelle hat. Am häufigsten tritt dieses Problem beim
+Suchen nach TCP\- oder UDP\-Sockets auf, wenn \fBfuser\fP nicht mit Root\-Rechten
+ausgeführt wird. In diesem Fall meldet \fBfuser\fP keinen Zugriff.
+.PP
+Die Installation von \fBfuser\fP SUID root wird Probleme vermeiden, die auf
+unvollständige Informationen zurückzuführen sind, aber könnte aus
+Sicherheitsgründen und zum Schutz der Privatsphäre unerwünscht sein.
+.PP
+\fBudp\fP\- und \fBtcp\fP\-Namensräume sowie UNIX\-Domain\-Sockets können mit einem
+Kernel älter als Version 1.3.78 nicht durchsucht werden.
+.PP
+Zugriffe durch den Kernel werden nur mit der Option \fB\-v\fP angezeigt.
+.PP
+Die Option \fB\-k\fP agiert nur auf Prozessen. Falls der Benutzer der Kernel
+ist, gibt \fBfuser\fP einen Hinweis aus, führt darüber hinaus aber keine Aktion
+aus.
+.PP
+\fBfuser\fP wird keine blockorientierten Geräte sehen können, die von Prozessen
+in einem anderen Einhängenamensraum eingehängt wurden. Das kommt daher, weil
+die in der Dateideskriptortabelle sichtbare Gerätekennung aus dem
+Prozessnamensraum stammt, nicht aus dem von \fBfuser\fP.
+.SH FEHLER
+.PP
+Der Befehl \fBfuser \-m /dev/sgX\fP zeigt alle Prozesse an (oder tötet diese,
+wenn die Option \fB\-k\fP angegeben ist), selbst dann, wenn Sie das Gerät nicht
+eingerichtet haben. Es könnte weitere Geräte geben, bei denen dies getan
+wird.
+.PP
+Die Option \fB\-m\fP von \fBmount\fP erkennt jede Datei innerhalb eines Geräts als
+die von Ihnen angegebene Datei; verwenden Sie zusätzlich die Option \fB\-M\fP,
+um zu verdeutlichen, dass Sie nur den Einhängepunkt angeben.
+.PP
+\fBfuser\fP wird zugewiesene Dateien nicht als Ãœbereinstimmung sehen,
+beispielsweise die gemeinsam genutzten Bibliotheken eines Prozesses, wenn
+diese sich auf einem \fBbtrfs\fP(5)\-Dateisystem befinden, da die
+Gerätekennungen für \fBstat\fP(2) und \fI/proc/<PID>/maps\fP
+unterschiedlich sind.
+.SH "SIEHE AUCH"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/de/killall.1 b/man-po/de/killall.1
new file mode 100644
index 0000000..2c0dc2c
--- /dev/null
+++ b/man-po/de/killall.1
@@ -0,0 +1,134 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH KILLALL 1 "17. Juni 2023" psmisc "Dienstprogramme für Benutzer"
+.SH BEZEICHNUNG
+killall \- Prozesse anhand des Namens töten
+.SH ÃœBERSICHT
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fIMuster\fP] [\fB\-e\fP,\fB\ \-\-exact\fP] [\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP \fIPID\fP]
+[\fB\-o\fP,\fB\ \-\-older\-than\fP \fIZEIT\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP] [\fB\-r\fP,\fB\ \-\-regexp\fP]
+[\fB\-s\fP,\fB\ \-\-signal\fP \fISIGNAL\fP,\ \fB\-\fP\fISIGNAL\fP] [\fB\-u\fP,\fB\ \-\-user\fP
+\fIBenutzer\fP] [\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP] [\fB\-y\fP,\fB\ \-\-younger\-than\fP \fIZEIT\fP] [\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\fB\ \-\-version\fP]
+[\fB\-\-\fP] \fIName\fP …
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH BESCHREIBUNG
+\fBkillall\fP sendet ein Signal an alle Prozesse, die mit dem angegebenen
+Befehl gestartet wurden. Wenn kein Signalname angegeben ist, wird das Signal
+SIGTERM gesendet.
+.PP
+Signale können entweder als Name (zum Beispiel \fB\-HUP\fP oder \fB\-SIGHUP\fP), als
+Nummer (zum Beispiel \fB\-1\fP) oder durch die Option \fB\-s\fP angegeben werden.
+.PP
+Falls der Befehlsname kein regulärer Ausdruck ist (Option \fB\-r\fP) und einen
+Schrägstrich (\fB/\fP) enthält, werden Prozesse, welche diese bestimmte Datei
+ausführen, zum Töten vorgesehen, unabhängig von deren Namen.
+.PP
+\fBkillall\fP gibt den Code 0 zurück, falls für jeden der aufgelisteten Befehle
+mindestens ein Prozess getötet wurde, oder es waren keine Befehle
+aufgelistet und mindestens ein Prozess entsprach den mit \fB\-u\fP und \fB\-Z\fP
+angegebenen Suchkriterien. \fBkillall\fP gibt anderenfalls einen von Null
+verschiedenen Wert zurück.
+.PP
+Ein \fBkillall\fP\-Prozess tötet sich niemals selbst (aber könnte von anderen
+\fBkillall\fP\-Prozessen getötet werden).
+.SH OPTIONEN
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+verlangt eine exakte Übereinstimmung für sehr lange Namen. Falls der
+Befehlsname länger als 15 Zeichen ist, könnte der vollständige Name nicht
+verfügbar sein (das heißt, er ist ausgelagert). In diesem Fall tötet
+\fBkillall\fP alles, was mit den ersten 15 Zeichen übereinstimmt. Mit \fB\-e\fP
+werden solche Einträge übersprungen. \fBkillall\fP gibt eine Meldung für jeden
+übersprungenen Eintrag aus, falls \fB\-v\fP zusätzlich zu \fB\-e\fP angegeben wird.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+ignoriert bei der Treffersuche die Groß\- oder Kleinschreibung.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+tötet die Prozessgruppe, zu welcher der Prozess gehört. Das Tötungssignal
+wird nur einmal pro Gruppe gesendet, selbst wenn in der Prozessgruppe
+mehrere Prozesse gefunden wurden.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+bittet vor dem Töten interaktiv um Bestätigung.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+listet alle bekannten Signalnamen auf.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+prüft anhand des PID\-Namensraums der angegebenen PID auf
+Übereinstimmungen. Standardmäßig wird die Überprüfung auf alle Namensräume
+bezogen.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+prüft nur Prozesse auf Übereinstimmungen, die älter als die angegebene Zeit
+sind, also vorher gestartet wurden. Die Zeit wird als Fließkommazahl mit
+angehängter Einheit angegeben. Die Einheiten sind s, m, h, d, w, M, y für
+Sekunden, Minuten, Stunden, Tage, Wochen, Monate beziehungsweise Jahre.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+beschwert sich nicht, falls keine Prozesse getötet wurden.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+interpretiert das Prozessnamensmuster als erweiterten regulären
+POSIX\-Ausdruck gemäß \fBregex\fP(3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fISIGNAL\fP"
+sendet dieses Signal anstelle von SIGTERM.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+tötet nur Prozesse, die dem angegebenen Benutzer gehören. Befehlsnamen sind
+optional.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+meldet, wenn das Signal erfolgreich gesendet wurde.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+zeigt Versionsinformationen an.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+wartet auf die Beendigung aller getöteten Prozesse. \fBkillall\fP prüft einmal
+pro Sekunde, ob irgendeiner der getöteten Prozesse noch existiert und
+liefert nur ein Ergebnis, falls keine Prozesse mehr verblieben
+sind. Beachten Sie, dass \fBkillall\fP unbegrenzt warten könnte, falls das
+Signal ignoriert wurde, unwirksam war oder der Prozess in einen
+Zombie\-Zustand übergegangen ist.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+prüft nur Prozesse auf Übereinstimmungen, die neuer als die angegebene Zeit
+sind, also später gestartet wurden. Die Zeit wird als Fließkommazahl mit
+angehängter Einheit angegeben. Die Einheiten sind s, m, h, d, w, M, y für
+Sekunden, Minuten, Stunden, Tage, Wochen, Monate beziehungsweise Jahre.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+gibt den Sicherheitskontext an: Es werden nur Prozesse getötet, deren
+Sicherheitskontext dem des Musters des angegebenen erweiterten regulären
+Ausdrucks entspricht. Dies muss anderen Argumenten in der Befehlszeile
+vorangestellt werden. Befehlsnamen sind optional.
+.SH DATEIEN
+.TP
+/proc
+Ort des /proc\-Dateisystems
+.SH "BEKANNTE FEHLER"
+Das Töten anhand des Dateinamens funktioniert nur für ausführbare Programme,
+die während der Ausführung offen gehalten werden, das heißt, unsaubere
+ausführbare Programme können auf diese Weise nicht getötet werden.
+.PP
+Seien Sie vorsichtig, wenn Sie \fBkillall\fP \fIName\fP eingeben, weil dies auf
+Nicht\-Linux\-Systemen nicht die gewünschte Wirkung haben könnte, insbesondere
+dann, wenn Sie es als privilegierter Benutzer ausführen.
+.PP
+\fBkillall \-w\fP erkennt in aufeinanderfolgenden Übrprüfungen nicht, ob ein
+Prozess beendet ist und durch einen Prozess mit der gleichen PID ersetzt
+wurde.
+.PP
+Falls Prozesse ihren Namen ändern, könnte \fBkillall\fP diese nicht korrekt
+erkennen.
+.PP
+Für \fBkillall\fP gibt es eine Begrenzung für die Namen, die in der
+Befehlszeile angegeben werden können. Dies ist die Größe einer
+vorzeichenlosen Ganzzahl, multipliziert mit 8. Für die meisten
+32\-Bit\-Systeme ist 32 die Begrenzung, analog dazu ist sie bei
+64\-Bit\-Systemen üblicherweise auf 64 begrenzt.
+.SH "SIEHE AUCH"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBregex\fP(3).
diff --git a/man-po/de/peekfd.1 b/man-po/de/peekfd.1
new file mode 100644
index 0000000..8025d28
--- /dev/null
+++ b/man-po/de/peekfd.1
@@ -0,0 +1,63 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 "1. Dezember 2021" psmisc "Dienstprogramme für Benutzer"
+.SH BEZEICHNUNG
+peekfd \- nach Dateideskriptoren laufender Prozesse schauen
+.SH ÃœBERSICHT
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-c\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIPID\fP [\fIDateideskriptor\fP] [\fIDateideskriptor\fP] …
+.SH BESCHREIBUNG
+\fBpeekfd\fP hängt sich an einen laufenden Prozess an und fängt alle Lese\- und
+Schreibvorgänge von und zu Dateideskriptoren ab. Sie können die Nummern der
+gewünschten Dateideskriptoren angeben oder alle ausgeben lassen.
+.SH OPTIONEN
+.IP \-8
+führt keine Nachverarbeitung der gelesenen oder geschriebenen Bytes durch.
+.IP \-n
+zeigt keine Kopfzeilen an, welche die Quelle der ausgegebenen Bytes angeben.
+.IP \-c
+gibt auch die Aktivität des angefragten Dateideskriptors in jeglichen neu
+erstellten Kindprozessen aus.
+.IP \-d
+entfernt Lese\- und Schreibvorgänge aus der Ausgabe, die mehrfach
+erscheinen. Wenn Sie ein TTY mit Echo verwenden, werden Sie dies
+möglicherweise brauchen.
+.IP \-v
+zeigt eine Versionszeichenkette an.
+.IP \-h
+zeigt eine Hilfemeldung an.
+.SH DATEIEN
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+Wird nicht verwendet, aber ist für den Benutzer nützlich, um die Nummern der
+gewünschten Dateideskriptoren zu finden.
+.SH UMGEBUNGSVARIABLEN
+Keine.
+.SH DIAGNOSE
+Die folgenden Diagosen können in die Standardfehlerausgabe geschrieben
+werden:
+.TP
+\fBFehler beim Anhängen an \fP\fI<PID>\fP
+Ein unbekannter Fehler ist bei dem Versuch aufgetreten, an einen Prozess
+anzuhängen. Möglicherweise müssen Sie Root sein.
+.SH FEHLER
+Wahrscheinlich viele. Seien Sie nicht überrascht, wenn der von Ihnen
+überwachte Prozess abstürzt.
+.SH AUTOR
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "SIEHE AUCH"
+\fBttysnoop\fP(8)
diff --git a/man-po/de/prtstat.1 b/man-po/de/prtstat.1
new file mode 100644
index 0000000..1bdb964
--- /dev/null
+++ b/man-po/de/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 "29. September 2020" psmisc "Dienstprogramme für Benutzer"
+.SH BEZEICHNUNG
+prtstat \- Statistiken eines Prozesses ausgeben
+.SH ÃœBERSICHT
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIPID\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH BESCHREIBUNG
+\fBprtstat\fP gibt die Statistiken des angegebenen Prozesses aus. Die
+Informationen werden aus der Datei \fB/proc/\fP\fIPID\fP\fB/stat\fP bezogen.
+.SH OPTIONEN
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+gibt die Informationen im Rohformat aus.
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+zeigt Versionsinformationen für \fBprtstat\fP an.
+.SH DATEIEN
+.TP
+\fB/proc/\fP\fIPID\fP\fB/stat\fP
+gibt die Informationsquelle an, die \fBprtstat\fP verwendet.
diff --git a/man-po/de/pslog.1 b/man-po/de/pslog.1
new file mode 100644
index 0000000..157dea8
--- /dev/null
+++ b/man-po/de/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 "29. September 2020" Linux Linux\-Benutzerhandbuch
+.SH BEZEICHNUNG
+pslog \- den aktuellen Protokollpfad eines Prozesses melden
+.SH ÃœBERSICHT
+.ad l
+\fBpslog\fP \fIPID\fP …"
+.br
+\fBpslog \-V\fP
+.ad b
+.SH BESCHREIBUNG
+Der Befehl \fBpslog\fP meldet den aktuellen Protokollpfad eines Prozesses.
+.SH OPTIONEN
+.TP
+\fB\-V\fP
+zeigt Versionsinformationen an.
+.SH "SIEHE AUCH"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH AUTOR
+Vito Mule’
+.MT mulevito@gmail.com
+.ME
+schrieb \fBpslog\fP im Jahre
+2015. Bitte senden Sie Fehlerberichte (auf Englisch) an
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/de/pstree.1 b/man-po/de/pstree.1
new file mode 100644
index 0000000..9dfaf6f
--- /dev/null
+++ b/man-po/de/pstree.1
@@ -0,0 +1,147 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 "21. Juni 2021" psmisc "Dienstprogramme für Benutzer"
+.SH BEZEICHNUNG
+pstree \- Prozesse in einer Baumansicht anzeigen
+.SH ÃœBERSICHT
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIAttribut\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fI\ PID\fP,\fB\ \-\-highlight\-pid\ \fP\fIPID\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fINamensraum\fP]
+[\fB\-p\fP,\fB\ \-\-show\-pids\fP] [\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP]
+[\fB\-u\fP,\fB\ \-\-uid\-changes\fP] [\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIPID\fP,\fB\ \fP\fIBenutzer\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH BESCHREIBUNG
+\fBpstree\fP zeigt die laufenden Prozesse in einer Baumansicht an. Die Wurzel
+des Baums wird anhand der angegebenen \fIPID\fP oder mittels \fBinit\fP gewählt,
+falls die \fIPID\fP weggelassen wird. Wenn ein Benutzername angegeben wird,
+werden die Wurzeln aller Prozessbäume anhand der Prozesse gewählt, die
+diesem Benutzer gehören.
+.PP
+\fBpstree\fP führt identische Zweige visuell zusammen, indem diese in eckige
+Klammern gesetzt werden und ihnen die Anzahl der Wiederholungen
+vorangestellt wird. Zum Beispiel wird
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+zu
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+Kind\-Threads eines Prozesses werden unter dem Elternprozess angezeigt und
+der Prozessname in geschweifte Klammern gesetzt, zum Beispiel
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+Falls \fBpstree\fP als \fBpstree.x11\fP aufgerufen wird, bittet es den Benutzer am
+Ende der Zeile, die Eingabetaste zu drücken und kehrt nicht zurück, bis dies
+geschehen ist. Dies ist nützlich, wenn \fBpstree\fP in einem X\-Terminal
+ausgeführt wird.
+.PP
+Bestimmte Kernel\- oder Einhängeparameter, wie die Option \fBhidepid\fP für
+\fBprocfs\fP, verstecken Informationen für einige Prozesse. In diesen
+Situationen versucht \fBpstree\fP, die Baumansicht ohne diese Informationen zu
+erstellen, wobei die Prozessnamen als Fragezeichen dargestellt werden.
+
+.SH OPTIONEN
+.IP \fB\-a\fP
+zeigt Befehlszeilenargumente an. Falls die Befehlszeile eines Prozesses
+ausgelagert ist, wird dieser Prozess in Klammern angezeigt. Die Option \fB\-a\fP
+deaktiviert implizit die Verdichtung für Prozesse, aber nicht für Threads.
+.IP \fB\-A\fP
+verwendet ASCII\-Zeichen zum Darstellen des Baums.
+.IP \fB\-c\fP
+deaktiviert die Verdichtung identischer Unterbäume. Standardmäßig werden
+Unterbäume verdichtet, wo immer es möglich ist.
+.IP \fB\-C\fP
+stellt den Prozessnamen anhand des angegebenen Attributs farbig
+dar. Gegenwärtig unterstützt \fBpstree\fP nur den Wert \fBage\fP, wodurch nach
+Alter des Prozesses eingefärbt wird. Prozesse, die jünger als 60 Sekunden
+sind, werden grün, Prozesse, die jünger als eine Stunde sind, gelb und die
+übrigen rot dargestellt.
+.IP \fB\-g\fP
+zeigt Prozessgruppenkennungen (PGIDs) an. Die PGIDs werden als Dezimalzahlen
+in Klammern nach jedem der Prozessnamen angezeigt. Falls sowohl PIDs als
+auch PGIDs angezeigt werden, erscheinen die PIDs zuerst.
+.IP \fB\-G\fP
+verwendet VT100\-Zeichen zum Darstellen von Linien.
+.IP \fB\-h\fP
+hebt den aktuellen Prozess und dessen Elternprozess hervor. Diese Option ist
+unwirksam, wenn das Terminal keine Hervorhebung unterstützt oder wenn weder
+der aktuelle Prozess noch irgendeiner seiner Elternprozesse im Unterbaum
+liegen, der angezeigt wird.
+.IP \fB\-H\fP
+agiert wie \fB\-h\fP, hebt aber stattdessen den angegebenen Prozess hervor. Im
+Gegensatz zu \fB\-h\fP schlägt \fBpstree\fP mit \fB\-H\fP fehl, falls keine
+Hervorhebung verfügbar ist.
+.IP \fB\-l\fP
+zeigt lange Zeilen an. Standardmäßig werden Zeilen entweder gemäß der
+Unmgebungsvariable COLUMN oder auf die Breite der Anzeige beschnitten. Falls
+keine dieser Methoden funktioniert, werden standardmäßig 132 Spalten
+verwendet.
+.IP \fB\-n\fP
+sortiert Prozesse mit dem gleichen Elternprozess nach PID anstatt nach Namen
+(numerische Sortierung).
+.IP \fB\-N\fP
+zeigt individuelle Bäume für jeden Namensraum des angegebenen Typs
+an. Folgende Typen sind verfügbar: \fIipc\fP, \fImnt\fP, \fInet\fP, \fIpid\fP, \fItime\fP,
+\fIuser\fP, \fIuts\fP. Gewöhnliche Benutzer haben keinen Zugriff auf die
+Informationen der Prozesse anderer Benutzer, daher wird die Ausgabe
+eingeschränkt sein.
+.IP \fB\-p\fP
+zeigt PIDs an. Die PIDs werden als Dezimalzahlen in Klammern nach jedem der
+Prozessnamen angezeigt. \fB\-p\fP deaktiviert die Verdichtung implizit.
+.IP \fB\-s\fP
+zeigt Elternprozesse des angegebenen Prozesses an.
+.IP \fB\-S\fP
+zeigt Namensraum\-Übergänge an. Wie mit \fB\-N\fP wird die Ausgabe bei der
+Ausführung als gewöhnlicher Benutzer eingeschränkt.
+.IP \fB\-t\fP
+zeigt vollständige Namen für Threads an, sofern verfügbar.
+.IP \fB\-T\fP
+versteckt Threads und zeigt nur Prozesse an.
+.IP \fB\-u\fP
+zeigt UID\-Übergänge an. Wann immer sich eine UID eines Prozesses von der UID
+seines Elternprozesses unterscheidet, wird die neue UID in Klammern nach dem
+Prozessnamen angezeigt.
+.IP \fB\-U\fP
+verwendet UTF\-8\-Zeichen (Unicode) zum Darstellen der Linien. Unter Linux
+1.1\-54 und neueren Versionen können Sie auf der Konsole mit \fBecho \-e \&'\033%8'\fP in den UTF\-8\-Modus wechseln und diesen mit \fBecho \-e '\033%@'\fP
+wieder verlassen.
+.IP \fB\-V\fP
+zeigt Versionsinformationen an.
+.IP \fB\-Z\fP
+zeigt die aktuellen Sicherheitsattribute des Prozesses an. Für
+SELinux\-Systeme wird dies der Sicherheitskontext sein.
+.SH DATEIEN
+.TP
+/proc
+Ort des /proc\-Dateisystems
+.SH FEHLER
+Einige Zeichensätze könnten zu den VT100\-Zeichen inkompatibel sein.
+.SH "SIEHE AUCH"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/man-po/fr.po b/man-po/fr.po
new file mode 100644
index 0000000..3bb7d2f
--- /dev/null
+++ b/man-po/fr.po
@@ -0,0 +1,1363 @@
+# French translations for psmisc-man package
+# Copyright (C) 2024 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Copyright © of this file:
+# Frédéric Marchal <fmarchal@perso.be>, 2024.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.7-rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2024-02-13 18:49+0100\n"
+"Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n >= 2);\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr "2022-11-02"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "Commandes de l'utilisateur"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser - identifie les processus qui utilisent des fichiers ou des sockets"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "SYNOPSIS"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<espace_noms>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<nom> ..."
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "DESCRIPTION"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid "B<fuser> displays the PIDs of processes using the specified files or file systems. In the default display mode, each file name is followed by a letter denoting the type of access:"
+msgstr "B<fuser> affiche les PID des processus utilisant les fichiers ou les systèmes de fichiers spécifiés. Dans le mode d'affichage par défaut, chaque nom de fichier est suivi d'une lettre dénotant le type d'accès :"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "répertoire courant."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "exécutable en cours d'exécution."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "fichier ouvert. B<f> est omis dans le mode d'affichage par défaut."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr "fichier ouvert en écriture. B<F> est omis dans le mode d'affichage par défaut."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "répertoire racine."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "fichier ouvert avec mmap ou bibliothèque partagée."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr "Remplissage, omis dans le mode d'affichage par défaut."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid "B<fuser> returns a non-zero return code if none of the specified files is accessed or in case of a fatal error. If at least one access has been found, B<fuser> returns zero."
+msgstr "B<fuser> retourne un code de retour non nul si aucun des fichiers spécifiés est accédé ou en cas d'erreur fatale. Si au moins un des fichiers accédés a été trouvé, B<fuser> retourne zéro."
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid "In order to look up processes using TCP and UDP sockets, the corresponding name space has to be selected with the B<-n> option. By default B<fuser> will look in both IPv6 and IPv4 sockets. To change the default behavior, use the B<-4> and B<-6> options. The socket(s) can be specified by the local and remote port, and the remote address. All fields are optional, but commas in front of missing fields must be present:"
+msgstr "Afin de rechercher les processus utilisant des sockets TCP et UDP, l'espace de noms correspondant doit être sélectionné avec l'option B<-n>. Par défaut, B<fuser> recherchera les sockets IPv6 et IPv4. Pour changer le comportement par défaut, utilisez les options B<-4> et B<-6>. Les sockets peuvent être spécifiés dans le port local, le port distant et l'adresse distante. Tous les champs sont optionnels mais une virgule doit être présente devant les champs manquants :"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<port_local>][,[I<hôte_distant>][,[I<port_distant>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid "Either symbolic or numeric values can be used for IP addresses and port numbers."
+msgstr "Des valeurs symboliques ou numériques peuvent être utilisées pour les adresses IP et les numéros de ports."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid "B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr "B<fuser> envoie uniquement les PID vers stdout, le reste est envoyé vers stderr."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "OPTIONS"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid "Show all files specified on the command line. By default, only files that are accessed by at least one process are shown."
+msgstr "Montrer tous les fichiers spécifiés sur la ligne de commande. Par défaut, seuls les fichiers qui sont accédés par au moins un processus sont montrés."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "Identique à l'option B<-m>, utilisé pour la compatibilité avec POSIX"
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "Ignoré silencieusement, utilisé pour la compatibilité avec POSIX."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid "Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, SIGKILL is sent. An B<fuser> process never kills itself, but may kill other B<fuser> processes. The effective user ID of the process executing B<fuser> is set to its real user ID before attempting to kill."
+msgstr "Tuer les processus accédant au fichier. À moins qu'il soit changé par B<->I<SIGNAL\\/>, SIGKILL est envoyé. Un processus B<fuser> ne se tue jamais lui-même mais il peut tuer d'autres processus B<fuser>. Le ID de l'utilisateur effectif du processus exécutant B<fuser> est remplacé par le ID de l'utilisateur réel avant de tenter de tuer le processus."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid "Ask the user for confirmation before killing a process. This option is silently ignored if B<-k> is not present too."
+msgstr "Demander confirmation à l'utilisateur avant de tuer le processus. Cette option est ignorée silencieusement si B<-k> n'est pas également présent."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid "For the name space B<file> let all comparisons be based on the inodes of the specified file(s) and never on the file names even on network based file systems."
+msgstr "Pour l'espace de noms B<file>, toutes les comparaisons sont basées sur les inodes des fichiers spécifiés et jamais sur les noms de fichiers même avec des systèmes de fichiers reposant sur le réseau."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "Lister tous les noms de signaux connus."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< NOM>, B<--mount >I<NOM>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid "I<NAME> specifies a file on a mounted file system or a block device that is mounted. All processes accessing files on that file system are listed. If a directory is specified, it is automatically changed to I<NAME>/ to use any file system that might be mounted on that directory."
+msgstr "I<NOM> spécifie un fichier sur un système de fichiers monté ou un périphérique bloc qui est monté. Tous les processus accédant à des fichiers sur ce système de fichiers sont listés. Si un répertoire est spécifié, il est automatiquement remplacé par I<NOM>/ pour utiliser tout système de fichiers qui pourrait être monté sur ce répertoire."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid "Request will be fulfilled only if I<NAME> specifies a mountpoint. This is an invaluable seat belt which prevents you from killing the machine if I<NAME> happens to not be a filesystem."
+msgstr "La requête sera remplie uniquement si I<NOM> spécifie un point de montage. Ceci est une précieuse sécurité qui vous empêche de tuer la machine si I<NOM> s'avère ne pas être un système de fichier."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid "Kill only processes which have write access. This option is silently ignored if B<-k> is not present too."
+msgstr "Tuer uniquement les processus qui ont un accès en écriture. Cette option est ignorée silencieusement si B<-k> n'est pas également présent."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< ESPACENOMS>, B<--namespace >I<ESPACENOMS>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid "Select a different name space. The name spaces B<file> (file names, the default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are supported. For ports, either the port number or the symbolic name can be specified. If there is no ambiguity, the shortcut notation I<name>B</>I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr "Sélectionner un espace de noms différents. Les espaces de noms supportés sont B<file> (noms de fichiers, par défaut), B<udp> (ports UDP locaux) et B<tcp> (ports tcp locaux). Les ports peuvent être spécifiés par le numéro de port ou par le nom symbolique. S'il n'y a pas d'ambigüité, la notation raccourcie I<nom>B</>I<espace> peut être utilisée (par exemple, I<80>B</>I<tcp>)."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid "Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not be used with B<-s>."
+msgstr "Opération silencieuse. B<-u> et B<-v> sont ignorés dans ce mode. B<-a> ne peut pas être utilisé avec B<-s>."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid "Use the specified signal instead of SIGKILL when killing processes. Signals can be specified either by name (e.g., B<-HUP>) or by number (e.g., B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr "Utilise le signal spécifié au lieu de SIGKILL pour tuer les processus. Les signaux peuvent être spécifiés soit par nom (par exemple, B<-HUP>) ou par numéro (par exemple, B<-1>). Cette option est ignorée silencieusement si l'option B<-k> n'est pas utilisée."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "Ajouter le nom d'utilisateur du propriétaire du processus à chaque PID."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid "Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, USER and COMMAND are similar to B<ps>. ACCESS shows how the process accesses the file. Verbose mode will also show when a particular file is being accessed as a mount point, knfs export or swap file. In this case B<kernel> is shown instead of the PID."
+msgstr "Mode verbeux. Les processus sont affichés dans un style similaire à B<ps>. Les champs PID, USER et COMMAND sont similaires à B<ps>. ACCESS montre comment le processus accède au fichier. Le mode verbeux montre aussi quand un fichier est accédé comme un point de montage, un export knfs ou un fichier d'échange. Dans ce cas, « B<kernel> » est montré au lieu du PID."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "Afficher les informations de version."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid "Search only for IPv4 sockets. This option must not be used with the B<-6> option and only has an effect with the tcp and udp namespaces."
+msgstr "Rechercher uniquement les sockets IPv4. Cette option ne doit pas être utilisée avec l'option B<-6> et n'a d'effet qu'avec les espaces de noms tcp et udp."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid "Search only for IPv6 sockets. This option must not be used with the B<-4> option and only has an effect with the tcp and udp namespaces."
+msgstr "Rechercher uniquement les sockets IPv6. Cette option ne doit pas être utilisée avec l'option B<-4> et n'a d'effet qu'avec les espaces de noms tcp et udp."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "FICHIERS"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "emplacement du système de fichiers proc"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "EXEMPLES"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr "tue tous les processus qui accèdent au système de fichier /home de quelque manière que ce soit."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<commande>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "invoque la I<commande> si aucun autre processus utilise /dev/ttyS1."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "montre tous les processus sur le port TELNET (local)."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "RESTRICTIONS"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid "Processes accessing the same file or file system several times in the same way are only shown once."
+msgstr "Les processus qui accèdent au même fichier ou système de fichiers plusieurs fois de la même manière sont montrés une seule fois."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid "If the same object is specified several times on the command line, some of those entries may be ignored."
+msgstr "Si le même objet est spécifié plusieurs fois sur la ligne de commande, certaines de ces entrées pourraient être ignorées."
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid "B<fuser> may only be able to gather partial information unless run with privileges. As a consequence, files opened by processes belonging to other users may not be listed and executables may be classified as mapped only."
+msgstr "B<fuser> pourrait n'obtenir que des informations partielles à moins d'être exécuté avec des privilèges. Par conséquent, les fichiers ouverts par des processus appartenant à d'autres utilisateurs peuvent ne pas être listés et les exécutables peuvent être classés comme ouverts avec map."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid "B<fuser> cannot report on any processes that it doesn't have permission to look at the file descriptor table for. The most common time this problem occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-root user. In this case B<fuser> will report no access."
+msgstr "B<fuser> ne sait pas fournir de rapport sur un processus qu'il n'a pas la permission d'examiner dans la table des descripteurs de fichiers. Ceci se produit le plus fréquemment en examinant des sockets TCP ou UDP alors que B<fuser> est exécuté par un compte non-root. Dans ce cas, B<fuser> ne signalera aucun accès."
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid "Installing B<fuser> SUID root will avoid problems associated with partial information, but may be undesirable for security and privacy reasons."
+msgstr "Installer B<fuser> SUID root évitera les problèmes liés aux informations partielles, mais cela pourrait être indésirable pour des raisons de sécurité et de confidentialité."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid "B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched with kernels older than 1.3.78."
+msgstr "Les espaces de noms B<upd> et B<tcp> ainsi que les sockets de domaines UNIX ne peuvent pas être recherchés avec les noyaux antérieurs à 1.3.78."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "Les accès du noyau sont uniquement montrés avec l'option B<-v>."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid "The B<-k> option only works on processes. If the user is the kernel, B<fuser> will print an advice, but take no action beyond that."
+msgstr "L'option B<-k> fonctionne uniquement sur des processus. Si l'utilisateur est le noyau, B<fuser> affichera une recommandation mais ne prendra aucune action particulière."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid "B<fuser> will not see block devices mounted by processes in a different mount namespace. This is due to the device ID shown in the process' file descriptor table being from the process namespace, not fuser's; meaning it won't match."
+msgstr "B<fuser> ne verra pas les périphériques blocs montés par des processus dans un espace de noms de montage différent. Ceci est dû au ID du périphérique montré dans la table des descripteurs de fichiers du processus qui appartient à l'espace de noms du processus et non à celui de fuser. Par conséquent, il ne correspondra pas."
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "BOGUES"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid "B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, even if you don't have that device configured. There may be other devices it does this for too."
+msgstr "B<fuser -m /dev/sdX> montrera (ou tuera avec l'option B<-k>) tous les processus, même si ce périphérique n'est pas configuré. Il peut y avoir d'autres périphériques pour lesquels il fait ceci aussi."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid "The mount B<-m> option will match any file within the same device as the specified file, use the B<-M> option as well if you mean to specify only the mount point."
+msgstr "L'option de montage B<-m> correspond à tout fichier sur le même périphérique que le fichier spécifié. Utilisez l'option B<-M> en plus si vous voulez spécifier uniquement le point de montage."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid "B<fuser> will not match mapped files, such as a process' shared libraries if they are on a B<btrfs>(5) filesystem due to the device IDs being different for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr "B<fuser> ne correspondra pas aux fichiers mappés, tels qu'un processus d'une bibliothèque partagée, s'ils sont sur un système de fichiers B<btrfs>(5) car les ID du périphérique sont différents pour B<stat>(2) et I</proc/E<lt>PIDE<gt>/maps>."
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "VOIR AUSSI"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+msgid "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "2023-06-17"
+msgstr "2023-06-17"
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall - tuer des processus par leur nom"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid "B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<name> ..."
+msgstr "B<killall> [B<-Z>,B<\\ --context> I<motif>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<TEMPS>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --user> I<utilisateur>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<TEMPS>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<nom> ..."
+
+#. type: Plain text
+#: ../doc/killall.1:41
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-l>, B<--list>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid "B<killall> sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent."
+msgstr "B<killall> envoie le signal à tous les processus exécutant une des commandes spécifiées. Si aucun nom de signal est fourni, SIGTERM est utilisé."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+msgid "Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr "Les signaux peuvent être spécifiés par nom (par exemple,\\& B<-HUP> ou B<-SIGHUP>) ou par numéro (par exemple,\\& B<-1>) ou par l'option B<-s>."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid "If the command name is not regular expression (option B<-r>) and contains a slash (B</>), processes executing that particular file will be selected for killing, independent of their name."
+msgstr "Si le nom de commande n'est pas une expression rationnelle (option B<-r>) et contient une barre oblique (B</>), les processus exécutant ce fichier en particulier seront sélectionnés pour être tués indépendamment de leur nom."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid "B<killall> returns a zero return code if at least one process has been killed for each listed command, or no commands were listed and at least one process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-zero otherwise."
+msgstr "B<killall> retourne un code de retour nul si au moins un processus a été tué pour chaque commande listée ou si aucune commande a été listée et au moins un processus correspondait aux critères de recherche de B<-u> et B<-Z>. B<killall> retourne un code non nul dans les autres cas."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid "A B<killall> process never kills itself (but may kill other B<killall> processes)."
+msgstr "Un processus B<killall> ne se tue jamais lui-même (mais il peut tuer d'autres processus B<killall>)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid "Require an exact match for very long names. If a command name is longer than 15 characters, the full name may be unavailable (i.e. it is swapped out). In this case, B<killall> will kill everything that matches within the first 15 characters. With B<-e>, such entries are skipped. B<killall> prints a message for each skipped entry if B<-v> is specified in addition to B<-e>."
+msgstr "Exiger une correspondance exacte pour des noms très longs. Si un nom de commande est plus long que 15 caractères, le nom complet peut ne pas être disponible (c-à-d qu'il est dans le fichier d'échange). Dans ce cas, B<killall> tuera tout ce qui correspond aux 15 premiers caractères. Avec B<-e>, de telles entrées sont ignorées. B<killall> affiche un message pour chaque entrée ignorée si B<-v> est spécifié en plus de B<-e>."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "Ignorer la casse lors des recherches de correspondances sur les noms des processus."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid "Kill the process group to which the process belongs. The kill signal is only sent once per group, even if multiple processes belonging to the same process group were found."
+msgstr "Tuer le groupe de processus auquel le processus appartient. Le signal de fin est envoyé une seule fois par groupe, même si plusieurs processus appartenant au même groupe de processus ont été trouvés."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "Demander, interactivement, une confirmation avant de tuer."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid "Match against the PID namespace of the given PID. The default is to match against all namespaces."
+msgstr "Établir la correspondance sur l'espace de noms du PID pour le PID donné. Par défaut, la correspondance est établie pour tous les espaces de noms."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid "Match only processes that are older (started before) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr "Correspondre uniquement au processus qui sont plus vieux (démarrés avant) que le temps spécifié. Le temps est spécifié avec un nombre décimal suivi d'une unité. Les unités sont s,m,h,d,w,M,y pour secondes, minutes, heures, jours, semaines, mois et années respectivement."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "Ne pas se plaindre si aucun processus a été tué."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid "Interpret process name pattern as a POSIX extended regular expression, per B<regex>(3)."
+msgstr "Interpréter le motif du nom de processus comme une expression rationnelle étendue POSIX comme défini par B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "Envoyer ce signal au lieu de SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid "Kill only processes the specified user owns. Command names are optional."
+msgstr "Ne tuer que les processus que l'utilisateur spécifié possède. Les noms de commandes sont optionnels."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "Indiquer si le signal a été envoyé avec succès."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid "Wait for all killed processes to die. B<killall> checks once per second if any of the killed processes still exist and only returns if none are left. Note that B<killall> may wait forever if the signal was ignored, had no effect, or if the process stays in zombie state."
+msgstr "Attendre que tous les processus tués soient morts. B<killall> vérifie une fois par seconde si un des processus tués existe encore et ne retourne que si plus aucun processus subsiste. Notez que B<killall> peut attendre indéfiniment si le signal a été ignoré, n'a pas eu d'effet ou si le processus reste dans un état zombie."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid "Match only processes that are younger (started after) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr "Correspondre uniquement au processus qui sont plus jeunes (démarrés après) que le temps spécifié. Le temps est spécifié avec un nombre décimal suivi d'une unité. Les unités sont s,m,h,d,w,M,y pour secondes, minutes, heures, jours, semaines, mois et années respectivement."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid "Specify security context: kill only processes having security context that match with given extended regular expression pattern. Must precede other arguments on the command line. Command names are optional."
+msgstr "Spécifier le contexte de sécurité : tuer uniquement les processus ayant un contexte de sécurité correspondant au motif de l'expression régulière étendue donnée. Il doit précéder les autres arguments sur la ligne de commande. Les noms de commandes sont optionnels."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "BOGUES CONNUS"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid "Killing by file only works for executables that are kept open during execution, i.e. impure executables can't be killed this way."
+msgstr "Tuer par fichier ne fonctionne que si les exécutables restent ouverts durant l'exécution. Cela signifie que les exécutables impures ne peuvent pas être tués de cette manière."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid "Be warned that typing B<killall> I<name> may not have the desired effect on non-Linux systems, especially when done by a privileged user."
+msgstr "Gardez à l'esprit que B<killall> I<nom> peut ne pas avoir l'effet désiré sur des systèmes non linux, en particulier, quand il est exécuté par un utilisateur privilégié."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid "B<killall -w> doesn't detect if a process disappears and is replaced by a new process with the same PID between scans."
+msgstr "B<killall -w> ne détecte pas si un processus disparaît et est remplacé par un nouveau processus avec le même PID entre deux balayages."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid "If processes change their name, B<killall> may not be able to match them correctly."
+msgstr "Si des processus changent leur nom, B<killall> peut être incapable d'établir une correspondance avec eux."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid "B<killall> has a limit of names that can be specified on the command line. This figure is the size of an unsigned long integer multiplied by 8. For most 32 bit systems the limit is 32 and similarly for a 64 bit system the limit is usually 64."
+msgstr "Il y a une limite sur les noms qui peuvent être spécifiés sur la ligne de commande de B<killall>. Ce nombre est la taille d'un entier long non signé multipliée par 8. Pour la plupart des systèmes 32 bits, cette limite est 32. De manière similaire, elle vaut habituellement 64 pour les systèmes 64 bits."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<regex>(3)."
+msgstr "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "2021-12-01"
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr "peekfd - examiner les descripteurs de fichiers des processus en cours d'exécution"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<pid> [I<fd>] [I<fd>] ..."
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid "B<peekfd> attaches to a running process and intercepts all reads and writes to file descriptors. You can specify the desired file descriptor numbers or dump all of them."
+msgstr "B<peekfd> s'attache à un processus en cours et intercepte toutes les lectures et les écritures dans les descripteurs de fichiers. Vous pouvez spécifier les numéros des descripteurs de fichiers désirés ou les vidanger tous."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr "Ne pas effectuer de post-traitement sur les octets lus ou écrits."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr "Ne pas afficher d'en-têtes indiquant l'origine des octets vidangés."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid "Also dump the requested file descriptor activity in any new child processes that are created."
+msgstr "Vidanger aussi les activités des descripteurs de fichiers requis dans tout processus enfant qui est créé."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid "Remove duplicate read/writes from the output. If you're looking at a tty with echo, you might want this."
+msgstr "Retirer les lectures/écritures dupliquées de la sortie. Si vous regardez un tty avec écho, vous pourriez avoir besoin de ceci."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "Afficher la chaîne de version."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "Afficher un message d'aide."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid "Not used but useful for the user to look at to get good file descriptor numbers."
+msgstr "Inutilisé mais utile pour montrer à l'utilisateur les bons numéros de descripteurs de fichiers."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "ENVIRONNEMENT"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "Aucun."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTICS"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr "Les diagnostiques suivants peuvent être émis sur stderr :"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Erreur lors de l'attachement au pid >I<E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid "An unknown error occurred while attempted to attach to a process, you may need to be root."
+msgstr "Une erreur inconnue est survenue en essayant de s'attacher à un processus, vous avez peut-être besoin d'être root."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid "Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr "Probablement beaucoup. Ne soyez pas surpris si le processus surveillé meurt."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "AUTEUR"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "29 septembre 2020"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "Linux\""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "Manuel de l'utilisateur Linux"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog - rapporter le chemin actuel des journaux d'un processus"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<pid> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr "La commande B<pslog> rapporte les journaux actifs actuels d'un processus."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid "Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr "Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> a écrit B<pslog> en 2015. Merci d'envoyer les rapports de bogues à E<.MT mulevito@gmail.com> E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prstat - imprimer les statistiques d'un processus"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid "B<prtstat> prints the statistics of the specified process. This information comes from the B</proc/>I<pid>B</stat> file."
+msgstr "B<prtstat> imprime les statistiques du processus spécifié. Ces informations proviennent du fichier B</proc/>I<pid>B</stat>."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "Imprimer les informations au format brut."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "Afficher les informations de version pour B<prtstat>."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<pid>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "source des informations utilisées par B<prtstat>."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "2021-06-21"
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree - afficher un arbre des processus"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<utilisateur>]"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid "B<pstree> shows running processes as a tree. The tree is rooted at either I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all process trees rooted at processes owned by that user are shown."
+msgstr "B<pstree> montre les processus en cours d'exécution sous forme d'arbre. L'arbre est ancré soit au I<pid> ou soit à B<init> si I<pid> est omis. Si un nom d'utilisateur est spécifié, tous les arbres de processus partant d'un processus de cet utilisateur sont montrés."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid "B<pstree> visually merges identical branches by putting them in square brackets and prefixing them with the repetition count, e.g."
+msgstr "B<pstree> fusionne visuellement les branches identiques en les mettant entre crochets et en les préfixant avec le compteur de répétitions, par exemple,"
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "devient"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid "Child threads of a process are found under the parent process and are shown with the process name in curly braces, e.g."
+msgstr "Les threads enfants d'un processus sont trouvés sous le processus parent et sont montrés avec le nom du processus entre accolades, par exemple,"
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid "If B<pstree> is called as B<pstree.x11> then it will prompt the user at the end of the line to press return and will not return until that has happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr "Si B<pstree> est appelé en tant que B<pstree.x11>, alors, il demande à l'utilisateur d'appuyer sur « retour » à la fin de la ligne et ne retournera pas tant que cela n'aura pas eu lieu. C'est utile quand B<pstree> est exécuté dans un xterminal."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid "Certain kernel or mount parameters, such as the I<hidepid> option for procfs, will hide information for some processes. In these situations B<pstree> will attempt to build the tree without this information, showing process names as question marks."
+msgstr "Certains noyaux ou paramètres de montage tels que l'option I<hidepid> de procfs cacheront les informations de certains processus. Dans ces cas, B<pstree> essayera de construire l'arbre sans ces informations. Les noms de processus seront remplacés par des points d'interrogation."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid "Show command line arguments. If the command line of a process is swapped out, that process is shown in parentheses. B<-a> implicitly disables compaction for processes but not threads."
+msgstr "Montrer les arguments de la ligne de commande. Si la ligne de commande du processus est placée dans le fichier d'échange, ce processus est affiché entre parenthèses. B<-a> désactive implicitement le compactage pour les processus mais pas pour les threads."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "Utiliser des caractères ASCII pour dessiner l'arbre."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid "Disable compaction of identical subtrees. By default, subtrees are compacted whenever possible."
+msgstr "Désactiver le compactage de sous-arbres identiques. Par défaut, les sous-arbres sont compactés dès que possible."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid "Color the process name by given attribute. Currently B<pstree> only accepts the value B<age> which colors by process age. Processes newer than 60 seconds are green, newer than an hour yellow and the remaining red."
+msgstr "Colorie le nom du processus avec l'attribut donné. Actuellement, B<pstree> accepte uniquement la valeur B<age> qui colorie en fonction de l'age du processus. Les processus plus récents que 60 secondes sont verts, ceux plus récents que une heure sont jaunes et les autres sont rouges."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid "Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses after each process name. If both PIDs and PGIDs are displayed then PIDs are shown first."
+msgstr "Montrer les PGID. Les ID de groupes de processus sont montrés sous forme de nombres décimaux entre parenthèses après le nom du processus. Si les PID et les PGID sont affichés, alors, les PID sont affichés en premier."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "Utiliser les caractères de dessin de lignes du VT100."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid "Highlight the current process and its ancestors. This is a no-op if the terminal doesn't support highlighting or if neither the current process nor any of its ancestors are in the subtree being shown."
+msgstr "Mettre en évidence le processus courant et ses ancêtres. Cette option ne fait rien si le terminal ne supporte pas la mise en évidence ou si ni le processus courant ni aucun de ses ancêtres est affiché."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid "Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr "Comme B<-h> mais met en évidence le processus spécifié. Contrairement à B<-h>, B<pstree> échoue si la mise en évidence n'est pas disponible quand B<-H> est utilisé."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid "Display long lines. By default, lines are truncated to either the COLUMNS environment variable or the display width. If neither of these methods work, the default of 132 columns is used."
+msgstr "Afficher les lignes longues. Par défaut, les lignes sont tronquées à la largeur définie par la variable d'environnement COLUMNS ou la largeur de l'affichage. Si aucune de ces méthodes fonctionne, 132 colonnes sont utilisées par défaut."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid "Sort processes with the same parent by PID instead of by name. (Numeric sort.)"
+msgstr "Trier les processus avec le même parent par PID au lieu du nom. (Tri numérique.)"
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid "Show individual trees for each namespace of the type specified. The available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Regular users don't have access to other users' processes information, so the output will be limited."
+msgstr "Montrer les arbres individuels pour chaque espace de noms du type spécifié. Les types disponibles sont: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Les utilisateurs réguliers n'ont pas accès aux informations des processus des autres utilisateurs, donc, la sortie sera limitée."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid "Show PIDs. PIDs are shown as decimal numbers in parentheses after each process name. B<-p> implicitly disables compaction."
+msgstr "Montrer les PID. Les PID sont montrés sous forme de nombre décimaux entre parenthèses après le nom du processus. B<-p> désactive implicitement le compactage."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "Montrer les processus parents du processus spécifié."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid "Show namespaces transitions. Like B<-N>, the output is limited when running as a regular user."
+msgstr "Montrer les transitions d'espaces de noms. Comme B<-N>, la sortie est limitée quand la commande est exécutée par un utilisateur régulier."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "Montrer les noms complets des threads si disponibles."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "Cacher les threads et montrer uniquement les processus."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid "Show uid transitions. Whenever the uid of a process differs from the uid of its parent, the new uid is shown in parentheses after the process name."
+msgstr "Montrer les transitions de uid. Quand le uid d'un processus diffère du uid de son parent, le nouvel uid est montré entre parenthèses après le nom du processus."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid "Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with B<echo -e '\\033%@'>."
+msgstr "Utiliser les caractères de dessin de lignes de UTF-8 (Unicode). Sous Linux 1.1-54 et suivants, la console entre en mode UTF-8 avec B<echo -e '\\033%8'> et en sort avec B<echo -e '\\033%@'>."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid "Show the current security attributes of the process. For SELinux systems this will be the security context."
+msgstr "Montrer les attributs de sécurité que le processus possède actuellement. Pour les systèmes SELinux, il s'agit du contexte de sécurité."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "Certains jeux de caractères peuvent être incompatibles avec les caractères VT100."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
+
+#, no-wrap
+#~ msgid "2021-01-11"
+#~ msgstr "2021-01-11"
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
+
+#~ msgid "B<->"
+#~ msgstr "B<->"
+
+#~ msgid "Reset all options and set the signal back to SIGKILL."
+#~ msgstr "Réinitialiser toutes les options et remettre le signal à SIGKILL."
+
+#~ msgid "(SELinux) Show security context for each process. This flag will only work if B<pstree> is compiled with SELinux support."
+#~ msgstr "(SELinux) Montrer le contexte de sécurité de chaque processus. Ce fanion ne fonctionne que si B<pstree> a été compilé pour supporter SELinux."
diff --git a/man-po/fr/fuser.1 b/man-po/fr/fuser.1
new file mode 100644
index 0000000..cd17394
--- /dev/null
+++ b/man-po/fr/fuser.1
@@ -0,0 +1,232 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 2022\-11\-02 psmisc "Commandes de l'utilisateur"
+.SH NOM
+fuser \- identifie les processus qui utilisent des fichiers ou des sockets
+.SH SYNOPSIS
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP
+\fIespace_noms\fP] [\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fISIGNAL\fP] ] \fInom\fP
+\&...
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH DESCRIPTION
+\fBfuser\fP affiche les PID des processus utilisant les fichiers ou les
+systèmes de fichiers spécifiés. Dans le mode d'affichage par défaut, chaque
+nom de fichier est suivi d'une lettre dénotant le type d'accès\ :
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+répertoire courant.
+.TP
+\fBe\fP
+exécutable en cours d'exécution.
+.TP
+\fBf\fP
+fichier ouvert. \fBf\fP est omis dans le mode d'affichage par défaut.
+.TP
+\fBF\fP
+fichier ouvert en écriture. \fBF\fP est omis dans le mode d'affichage par
+défaut.
+.TP
+\fBr\fP
+répertoire racine.
+.TP
+\fBm\fP
+fichier ouvert avec mmap ou bibliothèque partagée.
+.TP
+\&\fB.\fP
+Remplissage, omis dans le mode d'affichage par défaut.
+.PD
+.RE
+.LP
+\fBfuser\fP retourne un code de retour non nul si aucun des fichiers spécifiés
+est accédé ou en cas d'erreur fatale. Si au moins un des fichiers accédés a
+été trouvé, \fBfuser\fP retourne zéro.
+.PP
+Afin de rechercher les processus utilisant des sockets TCP et UDP, l'espace
+de noms correspondant doit être sélectionné avec l'option \fB\-n\fP. Par défaut,
+\fBfuser\fP recherchera les sockets IPv6 et IPv4. Pour changer le comportement
+par défaut, utilisez les options \fB\-4\fP et \fB\-6\fP. Les sockets peuvent être
+spécifiés dans le port local, le port distant et l'adresse distante. Tous
+les champs sont optionnels mais une virgule doit être présente devant les
+champs manquants\ :
+.PP
+[\fIport_local\fP][,[\fIhôte_distant\fP][,[\fIport_distant\fP]]]
+.PP
+Des valeurs symboliques ou numériques peuvent être utilisées pour les
+adresses IP et les numéros de ports.
+.PP
+\fBfuser\fP envoie uniquement les PID vers stdout, le reste est envoyé vers
+stderr.
+.SH OPTIONS
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+Montrer tous les fichiers spécifiés sur la ligne de commande. Par défaut,
+seuls les fichiers qui sont accédés par au moins un processus sont montrés.
+.TP
+\fB\-c\fP
+Identique à l'option \fB\-m\fP, utilisé pour la compatibilité avec POSIX
+.TP
+\fB\-f\fP
+Ignoré silencieusement, utilisé pour la compatibilité avec POSIX.
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+Tuer les processus accédant au fichier. À moins qu'il soit changé par
+\fB\-\fP\fISIGNAL\/\fP, SIGKILL est envoyé. Un processus \fBfuser\fP ne se tue jamais
+lui\-même mais il peut tuer d'autres processus \fBfuser\fP. Le ID de
+l'utilisateur effectif du processus exécutant \fBfuser\fP est remplacé par le
+ID de l'utilisateur réel avant de tenter de tuer le processus.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+Demander confirmation à l'utilisateur avant de tuer le processus. Cette
+option est ignorée silencieusement si \fB\-k\fP n'est pas également présent.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+Pour l'espace de noms \fBfile\fP, toutes les comparaisons sont basées sur les
+inodes des fichiers spécifiés et jamais sur les noms de fichiers même avec
+des systèmes de fichiers reposant sur le réseau.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+Lister tous les noms de signaux connus.
+.TP
+\fB\-m\fP\fI NOM\fP, \fB\-\-mount \fP\fINOM\fP
+\fINOM\fP spécifie un fichier sur un système de fichiers monté ou un
+périphérique bloc qui est monté. Tous les processus accédant à des fichiers
+sur ce système de fichiers sont listés. Si un répertoire est spécifié, il
+est automatiquement remplacé par \fINOM\fP/ pour utiliser tout système de
+fichiers qui pourrait être monté sur ce répertoire.
+.TP
+\fB\-M\fP, \fB\-\-ismountpoint\fP
+La requête sera remplie uniquement si \fINOM\fP spécifie un point de
+montage. Ceci est une précieuse sécurité qui vous empêche de tuer la machine
+si \fINOM\fP s'avère ne pas être un système de fichier.
+.TP
+\fB\-w\fP
+Tuer uniquement les processus qui ont un accès en écriture. Cette option
+est ignorée silencieusement si \fB\-k\fP n'est pas également présent.
+.TP
+\fB\-n\fP\fI ESPACENOMS\fP, \fB\-\-namespace \fP\fIESPACENOMS\fP
+Sélectionner un espace de noms différents. Les espaces de noms supportés
+sont \fBfile\fP (noms de fichiers, par défaut), \fBudp\fP (ports UDP locaux) et
+\fBtcp\fP (ports tcp locaux). Les ports peuvent être spécifiés par le numéro de
+port ou par le nom symbolique. S'il n'y a pas d'ambigüité, la notation
+raccourcie \fInom\fP\fB/\fP\fIespace\fP peut être utilisée (par exemple,
+\fI80\fP\fB/\fP\fItcp\fP).
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+Opération silencieuse. \fB\-u\fP et \fB\-v\fP sont ignorés dans ce mode. \fB\-a\fP ne
+peut pas être utilisé avec \fB\-s\fP.
+.TP
+\fB\-\fP\fISIGNAL\fP
+Utilise le signal spécifié au lieu de SIGKILL pour tuer les processus. Les
+signaux peuvent être spécifiés soit par nom (par exemple, \fB\-HUP\fP) ou par
+numéro (par exemple, \fB\-1\fP). Cette option est ignorée silencieusement si
+l'option \fB\-k\fP n'est pas utilisée.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+Ajouter le nom d'utilisateur du propriétaire du processus à chaque PID.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+Mode verbeux. Les processus sont affichés dans un style similaire à \fBps\fP.
+Les champs PID, USER et COMMAND sont similaires à \fBps\fP. ACCESS montre
+comment le processus accède au fichier. Le mode verbeux montre aussi quand
+un fichier est accédé comme un point de montage, un export knfs ou un
+fichier d'échange. Dans ce cas, «\ \fBkernel\fP\ » est montré au lieu du PID.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Afficher les informations de version.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+Rechercher uniquement les sockets IPv4. Cette option ne doit pas être
+utilisée avec l'option \fB\-6\fP et n'a d'effet qu'avec les espaces de noms tcp
+et udp.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+Rechercher uniquement les sockets IPv6. Cette option ne doit pas être
+utilisée avec l'option \fB\-4\fP et n'a d'effet qu'avec les espaces de noms tcp
+et udp.
+.SH FICHIERS
+.TP
+/proc
+emplacement du système de fichiers proc
+.SH EXEMPLES
+.TP
+\fBfuser \-km /home\fP
+tue tous les processus qui accèdent au système de fichier /home de quelque
+manière que ce soit.
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fIcommande\fP\fB; fi\fP
+invoque la \fIcommande\fP si aucun autre processus utilise /dev/ttyS1.
+.TP
+\fBfuser telnet/tcp\fP
+montre tous les processus sur le port TELNET (local).
+.SH RESTRICTIONS
+Les processus qui accèdent au même fichier ou système de fichiers plusieurs
+fois de la même manière sont montrés une seule fois.
+.PP
+Si le même objet est spécifié plusieurs fois sur la ligne de commande,
+certaines de ces entrées pourraient être ignorées.
+.PP
+\fBfuser\fP pourrait n'obtenir que des informations partielles à moins d'être
+exécuté avec des privilèges. Par conséquent, les fichiers ouverts par des
+processus appartenant à d'autres utilisateurs peuvent ne pas être listés et
+les exécutables peuvent être classés comme ouverts avec map.
+.PP
+\fBfuser\fP ne sait pas fournir de rapport sur un processus qu'il n'a pas la
+permission d'examiner dans la table des descripteurs de fichiers. Ceci se
+produit le plus fréquemment en examinant des sockets TCP ou UDP alors que
+\fBfuser\fP est exécuté par un compte non\-root. Dans ce cas, \fBfuser\fP ne
+signalera aucun accès.
+.PP
+Installer \fBfuser\fP SUID root évitera les problèmes liés aux informations
+partielles, mais cela pourrait être indésirable pour des raisons de sécurité
+et de confidentialité.
+.PP
+Les espaces de noms \fBupd\fP et \fBtcp\fP ainsi que les sockets de domaines UNIX
+ne peuvent pas être recherchés avec les noyaux antérieurs à 1.3.78.
+.PP
+Les accès du noyau sont uniquement montrés avec l'option \fB\-v\fP.
+.PP
+L'option \fB\-k\fP fonctionne uniquement sur des processus. Si l'utilisateur
+est le noyau, \fBfuser\fP affichera une recommandation mais ne prendra aucune
+action particulière.
+.PP
+\fBfuser\fP ne verra pas les périphériques blocs montés par des processus dans
+un espace de noms de montage différent. Ceci est dû au ID du périphérique
+montré dans la table des descripteurs de fichiers du processus qui
+appartient à l'espace de noms du processus et non à celui de fuser. Par
+conséquent, il ne correspondra pas.
+.SH BOGUES
+.PP
+\fBfuser \-m /dev/sdX\fP montrera (ou tuera avec l'option \fB\-k\fP) tous les
+processus, même si ce périphérique n'est pas configuré. Il peut y avoir
+d'autres périphériques pour lesquels il fait ceci aussi.
+.PP
+L'option de montage \fB\-m\fP correspond à tout fichier sur le même périphérique
+que le fichier spécifié. Utilisez l'option \fB\-M\fP en plus si vous voulez
+spécifier uniquement le point de montage.
+.PP
+\fBfuser\fP ne correspondra pas aux fichiers mappés, tels qu'un processus d'une
+bibliothèque partagée, s'ils sont sur un système de fichiers \fBbtrfs\fP(5) car
+les ID du périphérique sont différents pour \fBstat\fP(2) et
+\fI/proc/<PID>/maps\fP.
+.SH "VOIR AUSSI"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/fr/killall.1 b/man-po/fr/killall.1
new file mode 100644
index 0000000..6502cdf
--- /dev/null
+++ b/man-po/fr/killall.1
@@ -0,0 +1,128 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH KILLALL 1 2023\-06\-17 psmisc "Commandes de l'utilisateur"
+.SH NOM
+killall \- tuer des processus par leur nom
+.SH SYNOPSIS
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fImotif\fP] [\fB\-e\fP,\fB\ \-\-exact\fP] [\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP \fIPID\fP]
+[\fB\-o\fP,\fB\ \-\-older\-than\fP \fITEMPS\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP] [\fB\-r\fP,\fB\ \-\-regexp\fP] [\fB\-s\fP,\fB\ \-\-signal\fP \fISIGNAL\fP,\ \fB\-\fP\fISIGNAL\fP] [\fB\-u\fP,\fB\ \-\-user\fP \fIutilisateur\fP] [\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP]
+[\fB\-y\fP,\fB\ \-\-younger\-than\fP \fITEMPS\fP] [\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\fB\ \-\-version\fP] [\fB\-\-\fP] \fInom\fP ...
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH DESCRIPTION
+\fBkillall\fP envoie le signal à tous les processus exécutant une des commandes
+spécifiées. Si aucun nom de signal est fourni, SIGTERM est utilisé.
+.PP
+Les signaux peuvent être spécifiés par nom (par exemple,\& \fB\-HUP\fP ou
+\fB\-SIGHUP\fP) ou par numéro (par exemple,\& \fB\-1\fP) ou par l'option \fB\-s\fP.
+.PP
+Si le nom de commande n'est pas une expression rationnelle (option \fB\-r\fP) et
+contient une barre oblique (\fB/\fP), les processus exécutant ce fichier en
+particulier seront sélectionnés pour être tués indépendamment de leur nom.
+.PP
+\fBkillall\fP retourne un code de retour nul si au moins un processus a été tué
+pour chaque commande listée ou si aucune commande a été listée et au moins
+un processus correspondait aux critères de recherche de \fB\-u\fP et
+\fB\-Z\fP. \fBkillall\fP retourne un code non nul dans les autres cas.
+.PP
+Un processus \fBkillall\fP ne se tue jamais lui\-même (mais il peut tuer
+d'autres processus \fBkillall\fP).
+.SH OPTIONS
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+Exiger une correspondance exacte pour des noms très longs. Si un nom de
+commande est plus long que 15 caractères, le nom complet peut ne pas être
+disponible (c\-à\-d qu'il est dans le fichier d'échange). Dans ce cas,
+\fBkillall\fP tuera tout ce qui correspond aux 15 premiers caractères. Avec
+\fB\-e\fP, de telles entrées sont ignorées. \fBkillall\fP affiche un message pour
+chaque entrée ignorée si \fB\-v\fP est spécifié en plus de \fB\-e\fP.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+Ignorer la casse lors des recherches de correspondances sur les noms des
+processus.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+Tuer le groupe de processus auquel le processus appartient. Le signal de
+fin est envoyé une seule fois par groupe, même si plusieurs processus
+appartenant au même groupe de processus ont été trouvés.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+Demander, interactivement, une confirmation avant de tuer.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+Lister tous les noms de signaux connus.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+Établir la correspondance sur l'espace de noms du PID pour le PID donné. Par
+défaut, la correspondance est établie pour tous les espaces de noms.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+Correspondre uniquement au processus qui sont plus vieux (démarrés avant)
+que le temps spécifié. Le temps est spécifié avec un nombre décimal suivi
+d'une unité. Les unités sont s,m,h,d,w,M,y pour secondes, minutes, heures,
+jours, semaines, mois et années respectivement.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+Ne pas se plaindre si aucun processus a été tué.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+Interpréter le motif du nom de processus comme une expression rationnelle
+étendue POSIX comme défini par \fBregex\fP(3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fISIGNAL\fP"
+Envoyer ce signal au lieu de SIGTERM.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+Ne tuer que les processus que l'utilisateur spécifié possède. Les noms de
+commandes sont optionnels.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+Indiquer si le signal a été envoyé avec succès.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+Afficher les informations de version.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+Attendre que tous les processus tués soient morts. \fBkillall\fP vérifie une
+fois par seconde si un des processus tués existe encore et ne retourne que
+si plus aucun processus subsiste. Notez que \fBkillall\fP peut attendre
+indéfiniment si le signal a été ignoré, n'a pas eu d'effet ou si le
+processus reste dans un état zombie.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+Correspondre uniquement au processus qui sont plus jeunes (démarrés après)
+que le temps spécifié. Le temps est spécifié avec un nombre décimal suivi
+d'une unité. Les unités sont s,m,h,d,w,M,y pour secondes, minutes, heures,
+jours, semaines, mois et années respectivement.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+Spécifier le contexte de sécurité\ : tuer uniquement les processus ayant un
+contexte de sécurité correspondant au motif de l'expression régulière
+étendue donnée. Il doit précéder les autres arguments sur la ligne de
+commande. Les noms de commandes sont optionnels.
+.SH FICHIERS
+.TP
+/proc
+emplacement du système de fichiers proc
+.SH "BOGUES CONNUS"
+Tuer par fichier ne fonctionne que si les exécutables restent ouverts durant
+l'exécution. Cela signifie que les exécutables impures ne peuvent pas être
+tués de cette manière.
+.PP
+Gardez à l'esprit que \fBkillall\fP \fInom\fP peut ne pas avoir l'effet désiré sur
+des systèmes non linux, en particulier, quand il est exécuté par un
+utilisateur privilégié.
+.PP
+\fBkillall \-w\fP ne détecte pas si un processus disparaît et est remplacé par
+un nouveau processus avec le même PID entre deux balayages.
+.PP
+Si des processus changent leur nom, \fBkillall\fP peut être incapable d'établir
+une correspondance avec eux.
+.PP
+Il y a une limite sur les noms qui peuvent être spécifiés sur la ligne de
+commande de \fBkillall\fP. Ce nombre est la taille d'un entier long non signé
+multipliée par 8. Pour la plupart des systèmes 32 bits, cette limite est
+32. De manière similaire, elle vaut habituellement 64 pour les systèmes 64
+bits.
+.SH "VOIR AUSSI"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBregex\fP(3).
diff --git a/man-po/fr/peekfd.1 b/man-po/fr/peekfd.1
new file mode 100644
index 0000000..8369e4c
--- /dev/null
+++ b/man-po/fr/peekfd.1
@@ -0,0 +1,63 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 2021\-12\-01 psmisc "Commandes de l'utilisateur"
+.SH NOM
+peekfd \- examiner les descripteurs de fichiers des processus en cours
+d'exécution
+.SH SYNOPSIS
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-c\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIpid\fP [\fIfd\fP] [\fIfd\fP] ...
+.SH DESCRIPTION
+\fBpeekfd\fP s'attache à un processus en cours et intercepte toutes les
+lectures et les écritures dans les descripteurs de fichiers. Vous pouvez
+spécifier les numéros des descripteurs de fichiers désirés ou les vidanger
+tous.
+.SH OPTIONS
+.IP \-8
+Ne pas effectuer de post\-traitement sur les octets lus ou écrits.
+.IP \-n
+Ne pas afficher d'en\-têtes indiquant l'origine des octets vidangés.
+.IP \-c
+Vidanger aussi les activités des descripteurs de fichiers requis dans tout
+processus enfant qui est créé.
+.IP \-d
+Retirer les lectures/écritures dupliquées de la sortie. Si vous regardez un
+tty avec écho, vous pourriez avoir besoin de ceci.
+.IP \-v
+Afficher la chaîne de version.
+.IP \-h
+Afficher un message d'aide.
+.SH FICHIERS
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+Inutilisé mais utile pour montrer à l'utilisateur les bons numéros de
+descripteurs de fichiers.
+.SH ENVIRONNEMENT
+Aucun.
+.SH DIAGNOSTICS
+Les diagnostiques suivants peuvent être émis sur stderr\ :
+.TP
+\fBErreur lors de l'attachement au pid \fP\fI<PID>\fP
+Une erreur inconnue est survenue en essayant de s'attacher à un processus,
+vous avez peut\-être besoin d'être root.
+.SH BOGUES
+Probablement beaucoup. Ne soyez pas surpris si le processus surveillé
+meurt.
+.SH AUTEUR
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "VOIR AUSSI"
+\fBttysnoop\fP(8)
diff --git a/man-po/fr/prtstat.1 b/man-po/fr/prtstat.1
new file mode 100644
index 0000000..55476ad
--- /dev/null
+++ b/man-po/fr/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 "29 septembre 2020" psmisc "Commandes de l'utilisateur"
+.SH NOM
+prstat \- imprimer les statistiques d'un processus
+.SH SYNOPSIS
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH DESCRIPTION
+\fBprtstat\fP imprime les statistiques du processus spécifié. Ces informations
+proviennent du fichier \fB/proc/\fP\fIpid\fP\fB/stat\fP.
+.SH OPTIONS
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+Imprimer les informations au format brut.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Afficher les informations de version pour \fBprtstat\fP.
+.SH FICHIERS
+.TP
+\fB/proc/\fP\fIpid\fP\fB/stat\fP
+source des informations utilisées par \fBprtstat\fP.
diff --git a/man-po/fr/pslog.1 b/man-po/fr/pslog.1
new file mode 100644
index 0000000..daf175a
--- /dev/null
+++ b/man-po/fr/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 "29 septembre 2020" Linux\(dq "Manuel de l'utilisateur Linux"
+.SH NOM
+pslog \- rapporter le chemin actuel des journaux d'un processus
+.SH SYNOPSIS
+.ad l
+\fBpslog\fP \fIpid\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH DESCRIPTION
+La commande \fBpslog\fP rapporte les journaux actifs actuels d'un processus.
+.SH OPTIONS
+.TP
+\fB\-V\fP
+Afficher les informations de version.
+.SH "VOIR AUSSI"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH AUTEUR
+Vito Mule\(cq
+.MT mulevito@gmail.com
+.ME
+a écrit \fBpslog\fP en
+2015. Merci d'envoyer les rapports de bogues à
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/fr/pstree.1 b/man-po/fr/pstree.1
new file mode 100644
index 0000000..54f3098
--- /dev/null
+++ b/man-po/fr/pstree.1
@@ -0,0 +1,146 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 2021\-06\-21 psmisc "Commandes de l'utilisateur"
+.SH NOM
+pstree \- afficher un arbre des processus
+.SH SYNOPSIS
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIattr\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fI\ pid\fP,\fB\ \-\-highlight\-pid\ \fP\fIpid\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fIns\fP] [\fB\-p\fP,\fB\ \-\-show\-pids\fP]
+[\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP] [\fB\-u\fP,\fB\ \-\-uid\-changes\fP]
+[\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIpid\fP,\fB\ \fP\fIutilisateur\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH DESCRIPTION
+\fBpstree\fP montre les processus en cours d'exécution sous forme d'arbre.
+L'arbre est ancré soit au \fIpid\fP ou soit à \fBinit\fP si \fIpid\fP est omis. Si
+un nom d'utilisateur est spécifié, tous les arbres de processus partant d'un
+processus de cet utilisateur sont montrés.
+.PP
+\fBpstree\fP fusionne visuellement les branches identiques en les mettant entre
+crochets et en les préfixant avec le compteur de répétitions, par exemple,
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+devient
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+Les threads enfants d'un processus sont trouvés sous le processus parent et
+sont montrés avec le nom du processus entre accolades, par exemple,
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+Si \fBpstree\fP est appelé en tant que \fBpstree.x11\fP, alors, il demande à
+l'utilisateur d'appuyer sur «\ retour\ » à la fin de la ligne et ne retournera
+pas tant que cela n'aura pas eu lieu. C'est utile quand \fBpstree\fP est
+exécuté dans un xterminal.
+.PP
+Certains noyaux ou paramètres de montage tels que l'option \fIhidepid\fP de
+procfs cacheront les informations de certains processus. Dans ces cas,
+\fBpstree\fP essayera de construire l'arbre sans ces informations. Les noms de
+processus seront remplacés par des points d'interrogation.
+
+.SH OPTIONS
+.IP \fB\-a\fP
+Montrer les arguments de la ligne de commande. Si la ligne de commande du
+processus est placée dans le fichier d'échange, ce processus est affiché
+entre parenthèses. \fB\-a\fP désactive implicitement le compactage pour les
+processus mais pas pour les threads.
+.IP \fB\-A\fP
+Utiliser des caractères ASCII pour dessiner l'arbre.
+.IP \fB\-c\fP
+Désactiver le compactage de sous\-arbres identiques. Par défaut, les
+sous\-arbres sont compactés dès que possible.
+.IP \fB\-C\fP
+Colorie le nom du processus avec l'attribut donné. Actuellement, \fBpstree\fP
+accepte uniquement la valeur \fBage\fP qui colorie en fonction de l'age du
+processus. Les processus plus récents que 60 secondes sont verts, ceux plus
+récents que une heure sont jaunes et les autres sont rouges.
+.IP \fB\-g\fP
+Montrer les PGID. Les ID de groupes de processus sont montrés sous forme de
+nombres décimaux entre parenthèses après le nom du processus. Si les PID et
+les PGID sont affichés, alors, les PID sont affichés en premier.
+.IP \fB\-G\fP
+Utiliser les caractères de dessin de lignes du VT100.
+.IP \fB\-h\fP
+Mettre en évidence le processus courant et ses ancêtres. Cette option ne
+fait rien si le terminal ne supporte pas la mise en évidence ou si ni le
+processus courant ni aucun de ses ancêtres est affiché.
+.IP \fB\-H\fP
+Comme \fB\-h\fP mais met en évidence le processus spécifié. Contrairement à
+\fB\-h\fP, \fBpstree\fP échoue si la mise en évidence n'est pas disponible quand
+\fB\-H\fP est utilisé.
+.IP \fB\-l\fP
+Afficher les lignes longues. Par défaut, les lignes sont tronquées à la
+largeur définie par la variable d'environnement COLUMNS ou la largeur de
+l'affichage. Si aucune de ces méthodes fonctionne, 132 colonnes sont
+utilisées par défaut.
+.IP \fB\-n\fP
+Trier les processus avec le même parent par PID au lieu du nom. (Tri
+numérique.)
+.IP \fB\-N\fP
+Montrer les arbres individuels pour chaque espace de noms du type spécifié.
+Les types disponibles sont: \fIipc\fP, \fImnt\fP, \fInet\fP, \fIpid\fP, \fItime\fP,
+\fIuser\fP, \fIuts\fP. Les utilisateurs réguliers n'ont pas accès aux
+informations des processus des autres utilisateurs, donc, la sortie sera
+limitée.
+.IP \fB\-p\fP
+Montrer les PID. Les PID sont montrés sous forme de nombre décimaux entre
+parenthèses après le nom du processus. \fB\-p\fP désactive implicitement le
+compactage.
+.IP \fB\-s\fP
+Montrer les processus parents du processus spécifié.
+.IP \fB\-S\fP
+Montrer les transitions d'espaces de noms. Comme \fB\-N\fP, la sortie est
+limitée quand la commande est exécutée par un utilisateur régulier.
+.IP \fB\-t\fP
+Montrer les noms complets des threads si disponibles.
+.IP \fB\-T\fP
+Cacher les threads et montrer uniquement les processus.
+.IP \fB\-u\fP
+Montrer les transitions de uid. Quand le uid d'un processus diffère du uid
+de son parent, le nouvel uid est montré entre parenthèses après le nom du
+processus.
+.IP \fB\-U\fP
+Utiliser les caractères de dessin de lignes de UTF\-8 (Unicode). Sous Linux
+1.1\-54 et suivants, la console entre en mode UTF\-8 avec \fBecho \-e '\033%8'\fP
+et en sort avec \fBecho \-e '\033%@'\fP.
+.IP \fB\-V\fP
+Afficher les informations de version.
+.IP \fB\-Z\fP
+Montrer les attributs de sécurité que le processus possède actuellement.
+Pour les systèmes SELinux, il s'agit du contexte de sécurité.
+.SH FICHIERS
+.TP
+/proc
+emplacement du système de fichiers proc
+.SH BOGUES
+Certains jeux de caractères peuvent être incompatibles avec les caractères
+VT100.
+.SH "VOIR AUSSI"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/man-po/hr.po b/man-po/hr.po
new file mode 100644
index 0000000..20ba7d6
--- /dev/null
+++ b/man-po/hr.po
@@ -0,0 +1,1842 @@
+# Croatian translation for psmisc-man.
+# Copyright (C) 2021 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Božidar Putanec <bozidarp@yahoo.com>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.6-rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2023-05-01 11:55-0700\n"
+"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr "2022-11-02"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "Naredbe korisnika"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "IME"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser - procese identificira preko datoteka i utiÄnica"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "UPORABA"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "OPIS"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid ""
+"B<fuser> displays the PIDs of processes using the specified files or file "
+"systems. In the default display mode, each file name is followed by a "
+"letter denoting the type of access:"
+msgstr ""
+"B<fuser> pokaže PID-ove procesa koji koriste navedene datoteke ili datoteÄne "
+"sustave. U zadanom naÄinu prikaza, iza svakog imena datoteke slijedi slovo "
+"koje oznaÄava vrstu pristupa:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "tekući direktorij."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "pokrenuti izvršni program."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "otvorena datoteka. B<f> je izostavljen u zadanom naÄinu prikaza."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr ""
+"datoteka otvorena za pisanje. B<f> je izostavljen u zadanom naÄinu prikaza."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "korijenski (root) direktorij."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "pridružena mmap datoteka ili zajedniÄka knjižnica."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr "Rezervirano mjesto (izostavljeno u zadanom naÄinu prikaza)."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid ""
+"B<fuser> returns a non-zero return code if none of the specified files is "
+"accessed or in case of a fatal error. If at least one access has been "
+"found, B<fuser> returns zero."
+msgstr ""
+"B<fuser> vrati kôd razliÄit od nule ako ne može pristupiti nijednoj od "
+"navedenih datoteka ili u sluÄaju fatalne pogreÅ¡ke. Ako je ostvaren barem "
+"jedan pristup, B<fuser> vrati nulu."
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid ""
+"In order to look up processes using TCP and UDP sockets, the corresponding "
+"name space has to be selected with the B<-n> option. By default B<fuser> "
+"will look in both IPv6 and IPv4 sockets. To change the default behavior, "
+"use the B<-4> and B<-6> options. The socket(s) can be specified by the "
+"local and remote port, and the remote address. All fields are optional, but "
+"commas in front of missing fields must be present:"
+msgstr ""
+"Da se pronaÄ‘u procesi koji koriste TCP i UDP utiÄnice, odgovarajući imenski "
+"prostor mora biti odabran opcijom B<-n>. Zadano, B<fuser> pregleda IPv6 i "
+"IPv4 utiÄnice. Zadano ponaÅ¡anje možete promijeniti s opcijama B<-4> i B<-6>. "
+"UtiÄnic(a/e) može/mogu biti specificiran(a/e) s lokalnim i udaljenim portom "
+"ili udaljenom adresom. Sva polja nisu obavezna ali zarezi ispred polja kojih "
+"nema su obvezni:"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid ""
+"Either symbolic or numeric values can be used for IP addresses and port "
+"numbers."
+msgstr ""
+"Za IP adrese i brojeve porta mogu se koristiti simboliÄke ili numeriÄke "
+"vrijednosti."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid ""
+"B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr "B<fuser> ispiše samo PID-ove na stdout, a sve ostalo ide na stderr."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "OPCIJE"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid ""
+"Show all files specified on the command line. By default, only files that "
+"are accessed by at least one process are shown."
+msgstr ""
+"Prikaže sve datoteke navedene na naredbenom retku. Zadano, pokazane su samo "
+"one datoteke kojima je pristupio barem jedan proces."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "Isto kao opcija B<-m> (zbog kompatibilnosti s POSIX-om)."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "Zanemareno (zbog kompatibilnosti s POSIX-om)."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid ""
+"Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, "
+"SIGKILL is sent. An B<fuser> process never kills itself, but may kill other "
+"B<fuser> processes. The effective user ID of the process executing B<fuser> "
+"is set to its real user ID before attempting to kill."
+msgstr ""
+"Ubije procese koji pristupaju datoteci. Ako se ne promijeni s B<->I<SIGNAL\\/"
+">, pošalje se SIGKILL. B<fuser> proces se nikada ne ubije, ali može ubiti "
+"druge B<fuser> procese. Efektivni ID korisnika procesa koji izvršava "
+"B<fuser> postavlja se na realni korisniÄki ID prije pokuÅ¡aja ubijanja."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid ""
+"Ask the user for confirmation before killing a process. This option is "
+"silently ignored if B<-k> is not present too."
+msgstr ""
+"Pita korisnika da potvrdu prije nego ubije proces. Ova opcija je prešutno "
+"zanemarena ako opcija B<-k> nije navedena."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid ""
+"For the name space B<file> let all comparisons be based on the inodes of the "
+"specified file(s) and never on the file names even on network based file "
+"systems."
+msgstr ""
+"Za imenski prostor B<file> radi sve usporedbe bazirane na inodima navedenih "
+"datoteka a nikada na bazi imena datoteka ukljuÄujući i mrežne datoteÄne "
+"sustave."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "Ispiše imena svih poznatih signala."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< NAME>, B<--mount >I<NAME>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid ""
+"I<NAME> specifies a file on a mounted file system or a block device that is "
+"mounted. All processes accessing files on that file system are listed. If "
+"a directory is specified, it is automatically changed to I<NAME>/ to use any "
+"file system that might be mounted on that directory."
+msgstr ""
+"I<NAME> specificira datoteku na montiranom datoteÄnom sustavu ili blok "
+"uređaj koji je montiran. Izlistani su svi procesi koji pristupaju datotekama "
+"u tom datoteÄnom sustavu. Ako je naveden direktorij, automatski se premjesti "
+"u I<NAME>/ i koristi bilo koji datoteÄni sustav koji se može montirati na "
+"taj direktorij."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid ""
+"Request will be fulfilled only if I<NAME> specifies a mountpoint. This is "
+"an invaluable seat belt which prevents you from killing the machine if "
+"I<NAME> happens to not be a filesystem."
+msgstr ""
+"Zahtjev će se ispuniti samo ako I<NAME> navede toÄku montiranja. Ovo je "
+"iznimno važno jer spreÄava da ubijete stroj ako kojim sluÄajem I<NAME> nije "
+"datoteÄni sustav."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid ""
+"Kill only processes which have write access. This option is silently "
+"ignored if B<-k> is not present too."
+msgstr ""
+"Ubije samo procese koji mogu pisati. Ova se opcija prešutno zanemari ako B<-"
+"k> nije naveden."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid ""
+"Select a different name space. The name spaces B<file> (file names, the "
+"default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are "
+"supported. For ports, either the port number or the symbolic name can be "
+"specified. If there is no ambiguity, the shortcut notation I<name>B</"
+">I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr ""
+"Odabire drugi imenski prostor. Podržani su imenski prostori B<file> (zadano, "
+"imena datoteka), B<udp> (lokalni UDP portovi) i B<tcp> (lokalni TCP "
+"portovi). Za portove se mogu navesti ili broj porta ili simboliÄko ime. Ako "
+"nema viÅ¡eznaÄnosti, može se koristiti oznaka preÄaca I<name>B</>I<space> "
+"(npr. I<80>B</>I<tcp>)."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid ""
+"Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not "
+"be used with B<-s>."
+msgstr ""
+"PreÅ¡utna operacija. B<-u> and B<-v> se zanemare u ovom naÄinu rada. B<-a> se "
+"ne smije koristiti istovremeno s B<-s>."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid ""
+"Use the specified signal instead of SIGKILL when killing processes. Signals "
+"can be specified either by name (e.g., B<-HUP>) or by number (e.g., "
+"B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr ""
+"Koristite navedeni signal umjesto SIGKILL za ubijanje. Signali se mogu "
+"navesti imenom (npr. B<-HUP>) ili brojem (npr. B<-1>). Ova se opcija "
+"prešutno zanemari ako se ne koristi s opcijom B<-k>."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "Pripoji ime korisnika od vlasnika procesa svakom PID-u."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid ""
+"Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, "
+"USER and COMMAND are similar to B<ps>. ACCESS shows how the process "
+"accesses the file. Verbose mode will also show when a particular file is "
+"being accessed as a mount point, knfs export or swap file. In this case "
+"B<kernel> is shown instead of the PID."
+msgstr ""
+"OpÅ¡irni naÄin. Procesi su pokazani u stilu sliÄnom B<ps>. Polja PID, USER i "
+"COMMAND sliÄna su B<ps>. ACCESS prikaže kako proces pristupa datoteci. "
+"OpÅ¡irni naÄin takoÄ‘er prikaže kada se odreÄ‘enoj datoteci pristupi kao toÄki "
+"montiranja, kao knfs izvozu ili kao swap datoteci. U ovom se sluÄaju umjesto "
+"PID-a prikaže B<kernel>."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "Pokaže informacije o inaÄici."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid ""
+"Search only for IPv4 sockets. This option must not be used with the B<-6> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"Traži samo IPv4 utiÄnice. Ova se opcija ne smije koristiti s opcijom B<-6> i "
+"ima utjecaj samo na tcp i udp imenske prostore."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid ""
+"Search only for IPv6 sockets. This option must not be used with the B<-4> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"Traži samo IPv6 utiÄnice. Ova se opcija ne smije koristiti s opcijom B<-4> i "
+"ima utjecaj samo na tcp i udp imenske prostore."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "FILES"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "lokacija proc datoteÄnog sustava"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "PRIMJERI"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr ""
+"ubije sve procese koji na bilo koji naÄin pristupaju k /home datoteÄnom "
+"sustavu."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "pozove I<command> ako nijedan drugi proces ne koristi /dev/ttyS1."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "pokaži sve procese na (lokalnom) TELNET portu."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "OGRANIÄŒENJA"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid ""
+"Processes accessing the same file or file system several times in the same "
+"way are only shown once."
+msgstr ""
+"Procesi koji pristupaju istoj datoteci ili istom datoteÄnom sustavu na isti "
+"naÄin nekoliko puta, pokazani su samo jednom."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid ""
+"If the same object is specified several times on the command line, some of "
+"those entries may be ignored."
+msgstr ""
+"Ako je isti objekt naveden nekoliko puta na naredbenom retku, onda se neki "
+"od tih objekata mogu zanemariti."
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid ""
+"B<fuser> may only be able to gather partial information unless run with "
+"privileges. As a consequence, files opened by processes belonging to other "
+"users may not be listed and executables may be classified as mapped only."
+msgstr ""
+"B<fuser> može prikupiti djelomiÄne informacije ako nije pokrenut s "
+"privilegijama. Kao posljedica toga, datoteke koje su otvorili procesi koji "
+"pripadaju drugim korisnicima možda neće biti popisane, a izvršne datoteke "
+"mogu se klasificirati samo kao mapirane."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid ""
+"B<fuser> cannot report on any processes that it doesn't have permission to "
+"look at the file descriptor table for. The most common time this problem "
+"occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-"
+"root user. In this case B<fuser> will report no access."
+msgstr ""
+"B<fuser> ne može izvještavati ni o kakvim procesima za koje nema dozvolu "
+"pogledati tablicu deskriptora datoteke. NajÄešće, ovaj problem se javlja "
+"kada se traže TCP ili UDP utiÄnice a B<fuser> se pokrene kao nekorijenski "
+"korisnik. U tom sluÄaju B<fuser> neće prijaviti pristup."
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid ""
+"Installing B<fuser> SUID root will avoid problems associated with partial "
+"information, but may be undesirable for security and privacy reasons."
+msgstr ""
+"Instaliranjem B<fuser> SUID root izbjeći će se problemi povezani s "
+"djelomiÄnim informacijama, ali to može biti nepoželjno radi sigurnosti i "
+"privatnosti."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid ""
+"B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched "
+"with kernels older than 1.3.78."
+msgstr ""
+"Imenski prostori B<udp> i B<tcp> i utiÄnice UNIX domene nije moguće "
+"pretraživati s jezgrom (kernel) starijom od 1.3.78."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "Pristupi jezgri (kernel) pokazani su samo s opcijom B<-v>."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid ""
+"The B<-k> option only works on processes. If the user is the kernel, "
+"B<fuser> will print an advice, but take no action beyond that."
+msgstr ""
+"Opcija B<-k> radi samo na procesima. Ako je korisnik jezgra, B<fuser> će "
+"ispisati preporuku i ništa drugo neće poduzeti."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid ""
+"B<fuser> will not see block devices mounted by processes in a different "
+"mount namespace. This is due to the device ID shown in the process' file "
+"descriptor table being from the process namespace, not fuser's; meaning it "
+"won't match."
+msgstr ""
+"B<fuser> neće blokirati montiranje uređaja procesu u drugom imenskom "
+"prostoru. To je zato, jer je ID ureÄ‘aja prikazan datoteÄnim deskriptorom "
+"procesa, a ne od ID fuser-a; ne podudaraju se."
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "BUGS"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid ""
+"B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, "
+"even if you don't have that device configured. There may be other devices "
+"it does this for too."
+msgstr ""
+"B<fuser -m /dev/sgX> pokazat će (ili ubiti s B<-k>) sve procese, Äak i ako "
+"taj uređaj nije konfiguriran. Možda postoje i drugi uređaji za koje to isto "
+"Äini."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid ""
+"The mount B<-m> option will match any file within the same device as the "
+"specified file, use the B<-M> option as well if you mean to specify only the "
+"mount point."
+msgstr ""
+"Opcija montiranja B<-m> podudarat će se s bilo kojom datotekom na istom "
+"uređaju kao i navedena datoteka, upotrijebite i opciju B<-M> ako mislite "
+"navesti samo toÄku montiranja."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid ""
+"B<fuser> will not match mapped files, such as a process' shared libraries if "
+"they are on a B<btrfs>(5) filesystem due to the device IDs being different "
+"for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "POGLEDAJTE TAKOÄER"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+#, fuzzy
+#| msgid ""
+#| "B<kill>(1), B<killall>(1), B<lsof>(8), B<mount_namespaces>(7), "
+#| "B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgid ""
+"B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), "
+"B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr ""
+"B<kill>(1), B<killall>(1), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), "
+"B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, fuzzy, no-wrap
+#| msgid "2021-06-21"
+msgid "2023-06-17"
+msgstr "2021-06-21"
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall - ubije imenovane procese"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid ""
+"B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --"
+"user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<name> ..."
+msgstr ""
+"B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --"
+"user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<name> ..."
+
+#. type: Plain text
+#: ../doc/killall.1:41
+#, fuzzy
+#| msgid "B<killall> B<-V>,B<\\ --version>"
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid ""
+"B<killall> sends a signal to all processes running any of the specified "
+"commands. If no signal name is specified, SIGTERM is sent."
+msgstr ""
+"B<killall> pošalje signal svim procesima koji izvode bilo koju od navedenih "
+"naredbi. Ako nije navedeno ime signala, Å¡alje se SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+#, fuzzy
+#| msgid ""
+#| "Signals can be specified either by name (e.g. B<-HUP> or B<-SIGHUP>) or "
+#| "by number (e.g. B<-1>) or by option B<-s>."
+msgid ""
+"Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or "
+"by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr ""
+"Signali se mogu navesti ili imenom (npr. B<-HUP> ili B<-SIGHUP>) ili brojem "
+"(npr. B<-1>) ili opcijom B<-s>."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid ""
+"If the command name is not regular expression (option B<-r>) and contains a "
+"slash (B</>), processes executing that particular file will be selected for "
+"killing, independent of their name."
+msgstr ""
+"Ako ime naredbe nije regularni izraz (opcija B<-r>), a sadrži kosu crtu (B</"
+">), procesi koji izvršavaju tu određenu datoteku bit će odabrani za "
+"ubijanje, neovisno o njihovom imenu."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid ""
+"B<killall> returns a zero return code if at least one process has been "
+"killed for each listed command, or no commands were listed and at least one "
+"process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-"
+"zero otherwise."
+msgstr ""
+"B<killall> završi uspješno (završi s kodom nula) ako je za svaku navedenu "
+"naredbu ubijen barem jedan postupak ili ako nije navedena nijedna naredba i "
+"ako je barem jedan postupak odgovarao kriterijima pretraživanja B<-u> i B<-"
+"Z>. B<killall> u suprotnom zavrÅ¡i neuspjeÅ¡no (zavrÅ¡i s kodom razliÄitim od "
+"nule)."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid ""
+"A B<killall> process never kills itself (but may kill other B<killall> "
+"processes)."
+msgstr ""
+"B<killall> proces nikada ne ubije samog sebe (ali može ubiti druge "
+"B<killall> procese)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid ""
+"Require an exact match for very long names. If a command name is longer "
+"than 15 characters, the full name may be unavailable (i.e. it is swapped "
+"out). In this case, B<killall> will kill everything that matches within the "
+"first 15 characters. With B<-e>, such entries are skipped. B<killall> "
+"prints a message for each skipped entry if B<-v> is specified in addition to "
+"B<-e>."
+msgstr ""
+"Zahtijeva se toÄno podudaranje za vrlo duga imena. Ako je ime naredbe duže "
+"od 15 znakova, puno ime možda neće biti dostupno (tj. zamijenjeno je). U "
+"ovom će sluÄaju B<killall> ubiti sve Å¡to se podudara unutar prvih 15 "
+"znakova. B<-e> preskaÄe takve unose. B<killall> ispiÅ¡e poruku za svaki "
+"preskoÄeni unos ako je uz B<-e> naveden i B<-v>."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "Zanemari veliÄinu slova prilikom podudaranja."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid ""
+"Kill the process group to which the process belongs. The kill signal is "
+"only sent once per group, even if multiple processes belonging to the same "
+"process group were found."
+msgstr ""
+"Ubije procesnu grupu kojoj pripada proces. Signal ubijanja pošalje se samo "
+"jednom po grupi, Äak i ako je pronaÄ‘eno viÅ¡e procesa koji pripadaju istoj "
+"grupi procesa."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "Interaktivno pita za potvrdu prije ubijanja."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid ""
+"Match against the PID namespace of the given PID. The default is to match "
+"against all namespaces."
+msgstr ""
+"Traži procese samo u imenskom prostoru koji se podudara s navedenim PID-om. "
+"Zadano, pretražuju se svi imenski prostori."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid ""
+"Match only processes that are older (started before) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr ""
+"Podudara samo procese koji su stariji (pokrenuti prije) od navedenog "
+"vremena. Vrijeme se specificira kao decimalni broj s pomiÄnom toÄkom, a "
+"zatim slijedi jedinica za vrijeme. Jedinice su s, m, h, d, w, M, y za "
+"sekunde, minute, sate, dane, tjedne, mjesece i godine."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "Ne žali se ako nijedan proces nije ubijen."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid ""
+"Interpret process name pattern as a POSIX extended regular expression, per "
+"B<regex>(3)."
+msgstr ""
+"Razmatra uzorak imena procesa kao POSIX prošireni regularni izraz, prema "
+"B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "Pošalje taj signal umjesto SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid ""
+"Kill only processes the specified user owns. Command names are optional."
+msgstr ""
+"Ubije samo procese koje posjeduje navedeni korisnik. Imena naredbi nisu "
+"obavezna."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "Javi ako je signal uspješno poslan."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid ""
+"Wait for all killed processes to die. B<killall> checks once per second if "
+"any of the killed processes still exist and only returns if none are left. "
+"Note that B<killall> may wait forever if the signal was ignored, had no "
+"effect, or if the process stays in zombie state."
+msgstr ""
+"ÄŒeka dok svi ubijeni procesi ne umru. B<killall> provjerava jedanput svake "
+"sekunde postoji li još uvijek neki od ubijenih procesa i završi s uspjehom "
+"samo ako nijedan više nije živ. Imajte na umu da B<killall> može zauvijek "
+"Äekati ako je signal zanemaren, nije imao uÄinka ili ako postupak ostane u "
+"zombi stanju."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid ""
+"Match only processes that are younger (started after) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr ""
+"Podudara samo procese koji su mlađi (pokrenuti kasnije) od navedenog "
+"vremena. Vrijeme se specificira kao decimalni broj s pomiÄnom toÄkom, a "
+"zatim slijedi jedinica za vrijeme. Jedinice su s, m, h, d, w, M, y za "
+"sekunde, minute, sate, dane, tjedne, mjesece i godine."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid ""
+"Specify security context: kill only processes having security context that "
+"match with given extended regular expression pattern. Must precede other "
+"arguments on the command line. Command names are optional."
+msgstr ""
+"Navedite sigurnosni kontekst: ubije samo procese Äiji se sigurnosni kontekst "
+"podudara s uzorkom danim proširenim regularnim izrazom. Mora prethoditi "
+"ostalim argumentima u naredbenom retku. Imena naredbi nisu obavezna."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "POZNATE GREÅ KE"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid ""
+"Killing by file only works for executables that are kept open during "
+"execution, i.e. impure executables can't be killed this way."
+msgstr ""
+"Ubijanje pomoću datoteke funkcionira samo za izvršne datoteke koje drže "
+"datoteke otvorene tijekom izvrÅ¡avanja. Drugim rijeÄima, neÄiste izvrÅ¡ne "
+"datoteke ne mogu se ubiti na ovaj naÄin."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid ""
+"Be warned that typing B<killall> I<name> may not have the desired effect on "
+"non-Linux systems, especially when done by a privileged user."
+msgstr ""
+"Imajte na umu da naredba B<killall> I<name> možda neće imati željeni uÄinak "
+"na ne-Linux sustavima, posebno, ako to radi privilegirani korisnik."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid ""
+"B<killall -w> doesn't detect if a process disappears and is replaced by a "
+"new process with the same PID between scans."
+msgstr ""
+"B<killall -w> ne otkriva nestaje li proces i zamjenjuje ga novi proces s "
+"istim PID-om između skaniranja."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid ""
+"If processes change their name, B<killall> may not be able to match them "
+"correctly."
+msgstr ""
+"Ako procesi promijene svoje ime, B<killall> ih možda neće moći ispravno "
+"podudariti."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid ""
+"B<killall> has a limit of names that can be specified on the command line. "
+"This figure is the size of an unsigned long integer multiplied by 8. For "
+"most 32 bit systems the limit is 32 and similarly for a 64 bit system the "
+"limit is usually 64."
+msgstr ""
+"B<killall> ima ograniÄenje na broj imena koja se mogu specificirati u "
+"naredbenom retku. Taj broj je \"unsigned long integer\" pomnožen s 8. Za "
+"većinu 32-bitnih sustava ograniÄenje je 32, a za 64-bitni sustav je obiÄno "
+"64."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+msgstr ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "2021-12-01"
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr "peekfd - luka (gleda) u deskriptore datoteka pokrenutih procesa"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] ..."
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid ""
+"B<peekfd> attaches to a running process and intercepts all reads and writes "
+"to file descriptors. You can specify the desired file descriptor numbers or "
+"dump all of them."
+msgstr ""
+"B<peekfd> se prikvaÄi pokrenutom procesu i presreće svako Äitanje i pisanje "
+"u deskriptore datoteka. Možete specificirati željene brojeve deskriptora "
+"datoteka ili napraviti \"dump\" od svih naredbi za Äitanje i pisanje."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr ""
+"Ne obraÄ‘uje podatke o proÄitanim ili zapisanim bajtovima nakon primitka."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr ""
+"Ne pokazivati zaglavlja koja oznaÄavaju izvor primljenih (dumped) bajtova."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid ""
+"Also dump the requested file descriptor activity in any new child processes "
+"that are created."
+msgstr ""
+"Također spremi (dump) zatražene aktivnosti nad deskriptorima datoteke iz "
+"svih novih potomaka koji su stvoreni."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid ""
+"Remove duplicate read/writes from the output. If you're looking at a tty "
+"with echo, you might want this."
+msgstr ""
+"Uklanja duplicirane zapise Äitanja/pisanja na izlazu. To je korisno ako "
+"rabite tty s echo."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "Prikaže informacije o inaÄici."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "Prikaže tekst s pomoći."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid ""
+"Not used but useful for the user to look at to get good file descriptor "
+"numbers."
+msgstr ""
+"Ne rabi se, ali je korisno da ga korisnik pogleda i dobije dobre brojeve za "
+"deskriptor datoteke."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "OKOLINA"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "Nijedno."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "DIJAGNOSTIKA"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr "Sljedeće dijagnoze mogu biti ispisane na stderr:"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Greška povezana na pid >I<E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid ""
+"An unknown error occurred while attempted to attach to a process, you may "
+"need to be root."
+msgstr ""
+"Dogodila se nepoznata greška pri pokušaju pripajanja na proces. Možda morate "
+"biti root."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid ""
+"Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr ""
+"Vjerojatno puno. Nemojte se iznenaditi ako postupak koji nadgledate umre."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "AUTOR"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "2020-09-09"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "Linux\""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "KorisniÄki priruÄnik za Linux"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog - ispiše trenutnu stazu dnevnika (logs) procesa"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<pid> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr ""
+"B<pslog> naredba izvjesti o trenutnim radnim dnevnicima navedenog procesa."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. "
+"Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. "
+"Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat - ispiše statistiku navedog procesa"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid ""
+"B<prtstat> prints the statistics of the specified process. This information "
+"comes from the B</proc/>I<pid>B</stat> file."
+msgstr ""
+"B<prtstat> ispiše statistike navedenog procesa. Te informacije prikupi iz "
+"datoteke B</proc/>I<pid>B</stat>."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "Ispiše informacije u \"sirovom\" formatu."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "Pokaže informaciju o B<prtstat>."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<pid>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "izvor informacija koje koristi B<prtstat>."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "2021-06-21"
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree - prikaže stablo procesa"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-"
+"n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-"
+"n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid ""
+"B<pstree> shows running processes as a tree. The tree is rooted at either "
+"I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all "
+"process trees rooted at processes owned by that user are shown."
+msgstr ""
+"B<pstree> prikaže pokrenute procese kao stablo. Stablo je ukorijenjeno na "
+"I<pid> ili B<init> ako je I<pid> izostavljen. Ako je navedeno korisniÄko "
+"ime, prikaže sva stabla procesa ukorijenjena u procesima u vlasništvu tog "
+"korisnika."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid ""
+"B<pstree> visually merges identical branches by putting them in square "
+"brackets and prefixing them with the repetition count, e.g."
+msgstr ""
+"B<pstree> vizualno spaja identiÄne grane stavljajući ih u uglate zagrade i "
+"dodajući im prefiks s brojem ponavljanja, na pr."
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "postaje"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid ""
+"Child threads of a process are found under the parent process and are shown "
+"with the process name in curly braces, e.g."
+msgstr ""
+"Dretve potomka procesa nalaze se ispod roditeljskog procesa i prikazuju se s "
+"imenom procesa u vitiÄastim zagradama, na pr."
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid ""
+"If B<pstree> is called as B<pstree.x11> then it will prompt the user at the "
+"end of the line to press return and will not return until that has "
+"happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr ""
+"Ako je B<pstree> pozvan kao B<pstree.x11>, tada će na kraju retka zatražiti "
+"od korisnika da pritisne Enter i neće se vratiti dok se to ne napravi. Ovo "
+"je korisno kada se B<pstree> izvšava u xterminalu."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid ""
+"Certain kernel or mount parameters, such as the I<hidepid> option for "
+"procfs, will hide information for some processes. In these situations "
+"B<pstree> will attempt to build the tree without this information, showing "
+"process names as question marks."
+msgstr ""
+"Određeni parametri kernela ili montiranja, poput opcije I<hidepid> za "
+"procfs, sakrit će informacije za neke procese. U tim će situacijama "
+"B<pstree> pokušati izgraditi stablo bez ovih informacija, pokazujući imena "
+"procesa kao upitnike."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid ""
+"Show command line arguments. If the command line of a process is swapped "
+"out, that process is shown in parentheses. B<-a> implicitly disables "
+"compaction for processes but not threads."
+msgstr ""
+"Pokaže argumente naredbenog retka. Ako se naredbeni redak procesa isprazni, "
+"taj je proces prikazan u zagradama. B<-a> implicitno onemogućuje sažimanje "
+"za procese, ali ne i dretvi."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "Koristi ASCII znakove za crtanje stabla."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid ""
+"Disable compaction of identical subtrees. By default, subtrees are "
+"compacted whenever possible."
+msgstr ""
+"Onemogući sažimanje identiÄnih podstabala. Zadano, podstabla se sažimaju kad "
+"god je to moguće."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid ""
+"Color the process name by given attribute. Currently B<pstree> only accepts "
+"the value B<age> which colors by process age. Processes newer than 60 "
+"seconds are green, newer than an hour yellow and the remaining red."
+msgstr ""
+"Oboji ime postupka prema zadanom atributu. Trenutno B<pstree> prihvaća samo "
+"B<age> koji oboji ovisno o dobi procesa. Procesi noviji od 60 sekundi su "
+"zeleni, noviji od jednog sata su žuti, a preostali su crveni."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid ""
+"Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses "
+"after each process name. If both PIDs and PGIDs are displayed then PIDs are "
+"shown first."
+msgstr ""
+"Prikaže PGID-ove. ID-ovi grupa procesa pokazani su u decimalnim brojevima u "
+"zagradama nakon imena svakog procesa. Ako su pokazani i PID-ovi i PGID-ovi, "
+"onda se prvo pokazuju PID-ovi."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "Koristi znakove za crtanje po VT100."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid ""
+"Highlight the current process and its ancestors. This is a no-op if the "
+"terminal doesn't support highlighting or if neither the current process nor "
+"any of its ancestors are in the subtree being shown."
+msgstr ""
+"Istakne trenutni proces i njegove pretke. Ovo nije dopušteno ako terminal ne "
+"podržava isticanje ili ako se u podstablu ne pokazuje niti trenutni postupak "
+"niti bilo koji od njegovih predaka."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid ""
+"Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, "
+"B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr ""
+"Poput B<-h>, ali umjesto toga istakne navedeni postupak. Za razliku od B<-"
+"h>, B<pstree> ne uspijeva kada se koristi B<-H> ako nije isticanje dostupno."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid ""
+"Display long lines. By default, lines are truncated to either the COLUMNS "
+"environment variable or the display width. If neither of these methods "
+"work, the default of 132 columns is used."
+msgstr ""
+"Prikaže duge redove. Zadano, redci su skraćeni ili na varijablu okoline "
+"COLUMNS ili na Å¡irinu zaslona. Ako niti jedna od ovih metoda ne radi, "
+"koristi se zadano, 132 stupca."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid ""
+"Sort processes with the same parent by PID instead of by name. (Numeric "
+"sort.)"
+msgstr ""
+"Razvrsta procese s istim roditeljem po PID-u umjesto po imenu. (NumeriÄko "
+"sortiranje.)"
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid ""
+"Show individual trees for each namespace of the type specified. The "
+"available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, "
+"I<uts>. Regular users don't have access to other users' processes "
+"information, so the output will be limited."
+msgstr ""
+"Prikaže pojedinaÄna stabla za svaki imenski prostor specificiranog tipa. "
+"Dostupn su ove vrste: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, "
+"I<uts>. ObiÄni korisnici nemaju pristup informacijama o procesima drugih "
+"korisnika, pa će izlaz biti ograniÄen."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid ""
+"Show PIDs. PIDs are shown as decimal numbers in parentheses after each "
+"process name. B<-p> implicitly disables compaction."
+msgstr ""
+"Pokaže PID-ove. PID-ovi su prikazani kao decimalni brojevi u zagradama nakon "
+"imena svakog procesa. B<-p> implicitno onemogućuje sažimanje."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "Prikaže roditeljske procese navedenog procesa."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid ""
+"Show namespaces transitions. Like B<-N>, the output is limited when running "
+"as a regular user."
+msgstr ""
+"Prikaže prijelaze imenskih prostora. Poput B<-N>, ali izlaz je ograniÄen kad "
+"se to izvrÅ¡ava obiÄni korisnik."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "Ako su dostupna, pokaže puna imena dretvi."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "Sakrije dretve i pokaže samo procese."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid ""
+"Show uid transitions. Whenever the uid of a process differs from the uid of "
+"its parent, the new uid is shown in parentheses after the process name."
+msgstr ""
+"Prikaže UID prijelaze. Kad god se UID procesa razlikuje od UID-a njegovog "
+"roditelja, novi se UID prikaže u zagradama nakon imena procesa."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid ""
+"Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, "
+"UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with "
+"B<echo -e '\\033%@'>."
+msgstr ""
+"Koristi UTF-8 (Unicode) znakove za linije za crtanje. Pod Linuxom 1.1-54 i "
+"novijim, UTF-8 naÄin rada se unosi na konzolu s B<echo -e '\\033%8'>, a "
+"napušta se s B<echo -e '\\033%@'>."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid ""
+"Show the current security attributes of the process. For SELinux systems "
+"this will be the security context."
+msgstr ""
+"Pokaže trenutne sigurnosne atribute procesa. Za SELinux sustave to će biti "
+"sigurnosni kontekst."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "Neki skupovi znakova mogu biti nekompatibilni s VT100 znakovima."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
+
+#, no-wrap
+#~ msgid "2021-01-11"
+#~ msgstr "2021-01-11"
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
+
+#~ msgid "B<->"
+#~ msgstr "B<->"
+
+#~ msgid "Reset all options and set the signal back to SIGKILL."
+#~ msgstr "Resetira sve opcije i signal postavi opet na SIGKILL."
+
+#~ msgid ""
+#~ "(SELinux) Show security context for each process. This flag will only "
+#~ "work if B<pstree> is compiled with SELinux support."
+#~ msgstr ""
+#~ "Pokaže sigurnosni kontekst (samo za SELinux) za svaki proces. Taj flag "
+#~ "radi samo ako je B<pstree> sastavljen s podrškom za SELinux."
diff --git a/man-po/hr/fuser.1 b/man-po/hr/fuser.1
new file mode 100644
index 0000000..cdd24ca
--- /dev/null
+++ b/man-po/hr/fuser.1
@@ -0,0 +1,219 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 2022\-11\-02 psmisc "Naredbe korisnika"
+.SH IME
+fuser \- procese identificira preko datoteka i utiÄnica
+.SH UPORABA
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP \fIspace\fP]
+[\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fISIGNAL\fP] ] \fIname\fP ...
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH OPIS
+\fBfuser\fP pokaže PID\-ove procesa koji koriste navedene datoteke ili datoteÄne
+sustave. U zadanom naÄinu prikaza, iza svakog imena datoteke slijedi slovo
+koje oznaÄava vrstu pristupa:
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+tekući direktorij.
+.TP
+\fBe\fP
+pokrenuti izvršni program.
+.TP
+\fBf\fP
+otvorena datoteka. \fBf\fP je izostavljen u zadanom naÄinu prikaza.
+.TP
+\fBF\fP
+datoteka otvorena za pisanje. \fBf\fP je izostavljen u zadanom naÄinu prikaza.
+.TP
+\fBr\fP
+korijenski (root) direktorij.
+.TP
+\fBm\fP
+pridružena mmap datoteka ili zajedniÄka knjižnica.
+.TP
+\&\fB.\fP
+Rezervirano mjesto (izostavljeno u zadanom naÄinu prikaza).
+.PD
+.RE
+.LP
+\fBfuser\fP vrati kôd razliÄit od nule ako ne može pristupiti nijednoj od
+navedenih datoteka ili u sluÄaju fatalne pogreÅ¡ke. Ako je ostvaren barem
+jedan pristup, \fBfuser\fP vrati nulu.
+.PP
+Da se pronaÄ‘u procesi koji koriste TCP i UDP utiÄnice, odgovarajući imenski
+prostor mora biti odabran opcijom \fB\-n\fP. Zadano, \fBfuser\fP pregleda IPv6 i
+IPv4 utiÄnice. Zadano ponaÅ¡anje možete promijeniti s opcijama \fB\-4\fP i
+\fB\-6\fP. UtiÄnic(a/e) može/mogu biti specificiran(a/e) s lokalnim i udaljenim
+portom ili udaljenom adresom. Sva polja nisu obavezna ali zarezi ispred
+polja kojih nema su obvezni:
+.PP
+[\fIlcl_port\fP][,[\fIrmt_host\fP][,[\fIrmt_port\fP]]]
+.PP
+Za IP adrese i brojeve porta mogu se koristiti simboliÄke ili numeriÄke
+vrijednosti.
+.PP
+\fBfuser\fP ispiše samo PID\-ove na stdout, a sve ostalo ide na stderr.
+.SH OPCIJE
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+Prikaže sve datoteke navedene na naredbenom retku. Zadano, pokazane su samo
+one datoteke kojima je pristupio barem jedan proces.
+.TP
+\fB\-c\fP
+Isto kao opcija \fB\-m\fP (zbog kompatibilnosti s POSIX\-om).
+.TP
+\fB\-f\fP
+Zanemareno (zbog kompatibilnosti s POSIX\-om).
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+Ubije procese koji pristupaju datoteci. Ako se ne promijeni s
+\fB\-\fP\fISIGNAL\/\fP, pošalje se SIGKILL. \fBfuser\fP proces se nikada ne ubije, ali
+može ubiti druge \fBfuser\fP procese. Efektivni ID korisnika procesa koji
+izvrÅ¡ava \fBfuser\fP postavlja se na realni korisniÄki ID prije pokuÅ¡aja
+ubijanja.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+Pita korisnika da potvrdu prije nego ubije proces. Ova opcija je prešutno
+zanemarena ako opcija \fB\-k\fP nije navedena.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+Za imenski prostor \fBfile\fP radi sve usporedbe bazirane na inodima navedenih
+datoteka a nikada na bazi imena datoteka ukljuÄujući i mrežne datoteÄne
+sustave.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+Ispiše imena svih poznatih signala.
+.TP
+\fB\-m\fP\fI NAME\fP, \fB\-\-mount \fP\fINAME\fP
+\fINAME\fP specificira datoteku na montiranom datoteÄnom sustavu ili blok
+uređaj koji je montiran. Izlistani su svi procesi koji pristupaju datotekama
+u tom datoteÄnom sustavu. Ako je naveden direktorij, automatski se premjesti
+u \fINAME\fP/ i koristi bilo koji datoteÄni sustav koji se može montirati na
+taj direktorij.
+.TP
+\fB\-M\fP, \fB\-\-ismountpoint\fP
+Zahtjev će se ispuniti samo ako \fINAME\fP navede toÄku montiranja. Ovo je
+iznimno važno jer spreÄava da ubijete stroj ako kojim sluÄajem \fINAME\fP nije
+datoteÄni sustav.
+.TP
+\fB\-w\fP
+Ubije samo procese koji mogu pisati. Ova se opcija prešutno zanemari ako
+\fB\-k\fP nije naveden.
+.TP
+\fB\-n\fP\fI NAMESPACE\fP, \fB\-\-namespace \fP\fINAMESPACE\fP
+Odabire drugi imenski prostor. Podržani su imenski prostori \fBfile\fP (zadano,
+imena datoteka), \fBudp\fP (lokalni UDP portovi) i \fBtcp\fP (lokalni TCP
+portovi). Za portove se mogu navesti ili broj porta ili simboliÄko ime. Ako
+nema viÅ¡eznaÄnosti, može se koristiti oznaka preÄaca \fIname\fP\fB/\fP\fIspace\fP
+(npr. \fI80\fP\fB/\fP\fItcp\fP).
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+PreÅ¡utna operacija. \fB\-u\fP and \fB\-v\fP se zanemare u ovom naÄinu rada. \fB\-a\fP se
+ne smije koristiti istovremeno s \fB\-s\fP.
+.TP
+\fB\-\fP\fISIGNAL\fP
+Koristite navedeni signal umjesto SIGKILL za ubijanje. Signali se mogu
+navesti imenom (npr. \fB\-HUP\fP) ili brojem (npr. \fB\-1\fP). Ova se opcija
+prešutno zanemari ako se ne koristi s opcijom \fB\-k\fP.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+Pripoji ime korisnika od vlasnika procesa svakom PID\-u.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+OpÅ¡irni naÄin. Procesi su pokazani u stilu sliÄnom \fBps\fP. Polja PID, USER i
+COMMAND sliÄna su \fBps\fP. ACCESS prikaže kako proces pristupa
+datoteci. OpÅ¡irni naÄin takoÄ‘er prikaže kada se odreÄ‘enoj datoteci pristupi
+kao toÄki montiranja, kao knfs izvozu ili kao swap datoteci. U ovom se
+sluÄaju umjesto PID\-a prikaže \fBkernel\fP.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Pokaže informacije o inaÄici.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+Traži samo IPv4 utiÄnice. Ova se opcija ne smije koristiti s opcijom \fB\-6\fP i
+ima utjecaj samo na tcp i udp imenske prostore.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+Traži samo IPv6 utiÄnice. Ova se opcija ne smije koristiti s opcijom \fB\-4\fP i
+ima utjecaj samo na tcp i udp imenske prostore.
+.SH FILES
+.TP
+/proc
+lokacija proc datoteÄnog sustava
+.SH PRIMJERI
+.TP
+\fBfuser \-km /home\fP
+ubije sve procese koji na bilo koji naÄin pristupaju k /home datoteÄnom
+sustavu.
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fIcommand\fP\fB; fi\fP
+pozove \fIcommand\fP ako nijedan drugi proces ne koristi /dev/ttyS1.
+.TP
+\fBfuser telnet/tcp\fP
+pokaži sve procese na (lokalnom) TELNET portu.
+.SH OGRANIÄŒENJA
+Procesi koji pristupaju istoj datoteci ili istom datoteÄnom sustavu na isti
+naÄin nekoliko puta, pokazani su samo jednom.
+.PP
+Ako je isti objekt naveden nekoliko puta na naredbenom retku, onda se neki
+od tih objekata mogu zanemariti.
+.PP
+\fBfuser\fP može prikupiti djelomiÄne informacije ako nije pokrenut s
+privilegijama. Kao posljedica toga, datoteke koje su otvorili procesi koji
+pripadaju drugim korisnicima možda neće biti popisane, a izvršne datoteke
+mogu se klasificirati samo kao mapirane.
+.PP
+\fBfuser\fP ne može izvještavati ni o kakvim procesima za koje nema dozvolu
+pogledati tablicu deskriptora datoteke. NajÄešće, ovaj problem se javlja
+kada se traže TCP ili UDP utiÄnice a \fBfuser\fP se pokrene kao nekorijenski
+korisnik. U tom sluÄaju \fBfuser\fP neće prijaviti pristup.
+.PP
+Instaliranjem \fBfuser\fP SUID root izbjeći će se problemi povezani s
+djelomiÄnim informacijama, ali to može biti nepoželjno radi sigurnosti i
+privatnosti.
+.PP
+Imenski prostori \fBudp\fP i \fBtcp\fP i utiÄnice UNIX domene nije moguće
+pretraživati s jezgrom (kernel) starijom od 1.3.78.
+.PP
+Pristupi jezgri (kernel) pokazani su samo s opcijom \fB\-v\fP.
+.PP
+Opcija \fB\-k\fP radi samo na procesima. Ako je korisnik jezgra, \fBfuser\fP će
+ispisati preporuku i ništa drugo neće poduzeti.
+.PP
+\fBfuser\fP neće blokirati montiranje uređaja procesu u drugom imenskom
+prostoru. To je zato, jer je ID ureÄ‘aja prikazan datoteÄnim deskriptorom
+procesa, a ne od ID fuser\-a; ne podudaraju se.
+.SH BUGS
+.PP
+\fBfuser \-m /dev/sgX\fP pokazat će (ili ubiti s \fB\-k\fP) sve procese, Äak i ako
+taj uređaj nije konfiguriran. Možda postoje i drugi uređaji za koje to isto
+Äini.
+.PP
+Opcija montiranja \fB\-m\fP podudarat će se s bilo kojom datotekom na istom
+uređaju kao i navedena datoteka, upotrijebite i opciju \fB\-M\fP ako mislite
+navesti samo toÄku montiranja.
+.PP
+\fBfuser\fP will not match mapped files, such as a process' shared libraries if
+they are on a \fBbtrfs\fP(5) filesystem due to the device IDs being different
+for \fBstat\fP(2) and \fI/proc/<PID>/maps\fP.
+.SH "POGLEDAJTE TAKOÄER"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/hr/killall.1 b/man-po/hr/killall.1
new file mode 100644
index 0000000..8be26d7
--- /dev/null
+++ b/man-po/hr/killall.1
@@ -0,0 +1,127 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH KILLALL 1 2023\-06\-17 psmisc "Naredbe korisnika"
+.SH IME
+killall \- ubije imenovane procese
+.SH UPORABA
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fIpattern\fP] [\fB\-e\fP,\fB\ \-\-exact\fP] [\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP \fIPID\fP]
+[\fB\-o\fP,\fB\ \-\-older\-than\fP \fITIME\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP] [\fB\-r\fP,\fB\ \-\-regexp\fP]
+[\fB\-s\fP,\fB\ \-\-signal\fP \fISIGNAL\fP,\ \fB\-\fP\fISIGNAL\fP] [\fB\-u\fP,\fB\ \-\-user\fP \fIuser\fP]
+[\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP] [\fB\-y\fP,\fB\ \-\-younger\-than\fP
+\fITIME\fP] [\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\fB\ \-\-version\fP] [\fB\-\-\fP] \fIname\fP
+\&...
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH OPIS
+\fBkillall\fP pošalje signal svim procesima koji izvode bilo koju od navedenih
+naredbi. Ako nije navedeno ime signala, Å¡alje se SIGTERM.
+.PP
+Signals can be specified either by name (e.g.\& \fB\-HUP\fP or \fB\-SIGHUP\fP) or
+by number (e.g.\& \fB\-1\fP) or by option \fB\-s\fP.
+.PP
+Ako ime naredbe nije regularni izraz (opcija \fB\-r\fP), a sadrži kosu crtu
+(\fB/\fP), procesi koji izvršavaju tu određenu datoteku bit će odabrani za
+ubijanje, neovisno o njihovom imenu.
+.PP
+\fBkillall\fP završi uspješno (završi s kodom nula) ako je za svaku navedenu
+naredbu ubijen barem jedan postupak ili ako nije navedena nijedna naredba i
+ako je barem jedan postupak odgovarao kriterijima pretraživanja \fB\-u\fP i
+\fB\-Z\fP. \fBkillall\fP u suprotnom zavrÅ¡i neuspjeÅ¡no (zavrÅ¡i s kodom razliÄitim
+od nule).
+.PP
+\fBkillall\fP proces nikada ne ubije samog sebe (ali može ubiti druge
+\fBkillall\fP procese).
+.SH OPCIJE
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+Zahtijeva se toÄno podudaranje za vrlo duga imena. Ako je ime naredbe duže
+od 15 znakova, puno ime možda neće biti dostupno (tj. zamijenjeno je). U
+ovom će sluÄaju \fBkillall\fP ubiti sve Å¡to se podudara unutar prvih 15
+znakova. \fB\-e\fP preskaÄe takve unose. \fBkillall\fP ispiÅ¡e poruku za svaki
+preskoÄeni unos ako je uz \fB\-e\fP naveden i \fB\-v\fP.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+Zanemari veliÄinu slova prilikom podudaranja.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+Ubije procesnu grupu kojoj pripada proces. Signal ubijanja pošalje se samo
+jednom po grupi, Äak i ako je pronaÄ‘eno viÅ¡e procesa koji pripadaju istoj
+grupi procesa.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+Interaktivno pita za potvrdu prije ubijanja.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+Ispiše imena svih poznatih signala.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+Traži procese samo u imenskom prostoru koji se podudara s navedenim
+PID\-om. Zadano, pretražuju se svi imenski prostori.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+Podudara samo procese koji su stariji (pokrenuti prije) od navedenog
+vremena. Vrijeme se specificira kao decimalni broj s pomiÄnom toÄkom, a
+zatim slijedi jedinica za vrijeme. Jedinice su s, m, h, d, w, M, y za
+sekunde, minute, sate, dane, tjedne, mjesece i godine.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+Ne žali se ako nijedan proces nije ubijen.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+Razmatra uzorak imena procesa kao POSIX prošireni regularni izraz, prema
+\fBregex\fP(3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fISIGNAL\fP"
+Pošalje taj signal umjesto SIGTERM.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+Ubije samo procese koje posjeduje navedeni korisnik. Imena naredbi nisu
+obavezna.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+Javi ako je signal uspješno poslan.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+Pokaže informacije o inaÄici.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+ÄŒeka dok svi ubijeni procesi ne umru. \fBkillall\fP provjerava jedanput svake
+sekunde postoji li još uvijek neki od ubijenih procesa i završi s uspjehom
+samo ako nijedan više nije živ. Imajte na umu da \fBkillall\fP može zauvijek
+Äekati ako je signal zanemaren, nije imao uÄinka ili ako postupak ostane u
+zombi stanju.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+Podudara samo procese koji su mlađi (pokrenuti kasnije) od navedenog
+vremena. Vrijeme se specificira kao decimalni broj s pomiÄnom toÄkom, a
+zatim slijedi jedinica za vrijeme. Jedinice su s, m, h, d, w, M, y za
+sekunde, minute, sate, dane, tjedne, mjesece i godine.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+Navedite sigurnosni kontekst: ubije samo procese Äiji se sigurnosni kontekst
+podudara s uzorkom danim proširenim regularnim izrazom. Mora prethoditi
+ostalim argumentima u naredbenom retku. Imena naredbi nisu obavezna.
+.SH FILES
+.TP
+/proc
+lokacija proc datoteÄnog sustava
+.SH "POZNATE GREÅ KE"
+Ubijanje pomoću datoteke funkcionira samo za izvršne datoteke koje drže
+datoteke otvorene tijekom izvrÅ¡avanja. Drugim rijeÄima, neÄiste izvrÅ¡ne
+datoteke ne mogu se ubiti na ovaj naÄin.
+.PP
+Imajte na umu da naredba \fBkillall\fP \fIname\fP možda neće imati željeni uÄinak
+na ne\-Linux sustavima, posebno, ako to radi privilegirani korisnik.
+.PP
+\fBkillall \-w\fP ne otkriva nestaje li proces i zamjenjuje ga novi proces s
+istim PID\-om između skaniranja.
+.PP
+Ako procesi promijene svoje ime, \fBkillall\fP ih možda neće moći ispravno
+podudariti.
+.PP
+\fBkillall\fP ima ograniÄenje na broj imena koja se mogu specificirati u
+naredbenom retku. Taj broj je "unsigned long integer" pomnožen s 8. Za
+većinu 32\-bitnih sustava ograniÄenje je 32, a za 64\-bitni sustav je obiÄno
+64.
+.SH "POGLEDAJTE TAKOÄER"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBregex\fP(3).
diff --git a/man-po/hr/peekfd.1 b/man-po/hr/peekfd.1
new file mode 100644
index 0000000..241bbe6
--- /dev/null
+++ b/man-po/hr/peekfd.1
@@ -0,0 +1,60 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 2021\-12\-01 psmisc "Naredbe korisnika"
+.SH IME
+peekfd \- luka (gleda) u deskriptore datoteka pokrenutih procesa
+.SH UPORABA
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-c\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIpid\fP [\fIfd\fP] [\fIfd\fP] ...
+.SH OPIS
+\fBpeekfd\fP se prikvaÄi pokrenutom procesu i presreće svako Äitanje i pisanje
+u deskriptore datoteka. Možete specificirati željene brojeve deskriptora
+datoteka ili napraviti "dump" od svih naredbi za Äitanje i pisanje.
+.SH OPCIJE
+.IP \-8
+Ne obraÄ‘uje podatke o proÄitanim ili zapisanim bajtovima nakon primitka.
+.IP \-n
+Ne pokazivati zaglavlja koja oznaÄavaju izvor primljenih (dumped) bajtova.
+.IP \-c
+Također spremi (dump) zatražene aktivnosti nad deskriptorima datoteke iz
+svih novih potomaka koji su stvoreni.
+.IP \-d
+Uklanja duplicirane zapise Äitanja/pisanja na izlazu. To je korisno ako
+rabite tty s echo.
+.IP \-v
+Prikaže informacije o inaÄici.
+.IP \-h
+Prikaže tekst s pomoći.
+.SH FILES
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+Ne rabi se, ali je korisno da ga korisnik pogleda i dobije dobre brojeve za
+deskriptor datoteke.
+.SH OKOLINA
+Nijedno.
+.SH DIJAGNOSTIKA
+Sljedeće dijagnoze mogu biti ispisane na stderr:
+.TP
+\fBGreška povezana na pid \fP\fI<PID>\fP
+Dogodila se nepoznata greška pri pokušaju pripajanja na proces. Možda morate
+biti root.
+.SH BUGS
+Vjerojatno puno. Nemojte se iznenaditi ako postupak koji nadgledate umre.
+.SH AUTOR
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "POGLEDAJTE TAKOÄER"
+\fBttysnoop\fP(8)
diff --git a/man-po/hr/prtstat.1 b/man-po/hr/prtstat.1
new file mode 100644
index 0000000..9b3afd9
--- /dev/null
+++ b/man-po/hr/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 2020\-09\-09 psmisc "Naredbe korisnika"
+.SH IME
+prtstat \- ispiše statistiku navedog procesa
+.SH UPORABA
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH OPIS
+\fBprtstat\fP ispiše statistike navedenog procesa. Te informacije prikupi iz
+datoteke \fB/proc/\fP\fIpid\fP\fB/stat\fP.
+.SH OPCIJE
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+Ispiše informacije u "sirovom" formatu.
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+Pokaže informaciju o \fBprtstat\fP.
+.SH FILES
+.TP
+\fB/proc/\fP\fIpid\fP\fB/stat\fP
+izvor informacija koje koristi \fBprtstat\fP.
diff --git a/man-po/hr/pslog.1 b/man-po/hr/pslog.1
new file mode 100644
index 0000000..e414d0d
--- /dev/null
+++ b/man-po/hr/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 2020\-09\-09 Linux\(dq "KorisniÄki priruÄnik za Linux"
+.SH IME
+pslog \- ispiše trenutnu stazu dnevnika (logs) procesa
+.SH UPORABA
+.ad l
+\fBpslog\fP \fIpid\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH OPIS
+\fBpslog\fP naredba izvjesti o trenutnim radnim dnevnicima navedenog procesa.
+.SH OPCIJE
+.TP
+\fB\-V\fP
+Pokaže informacije o inaÄici.
+.SH "POGLEDAJTE TAKOÄER"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH AUTOR
+Vito Mule\(cq
+.MT mulevito@gmail.com
+.ME
+wrote \fBpslog\fP in
+2015. Please send bug reports to
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/hr/pstree.1 b/man-po/hr/pstree.1
new file mode 100644
index 0000000..9ad4d2f
--- /dev/null
+++ b/man-po/hr/pstree.1
@@ -0,0 +1,138 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 2021\-06\-21 psmisc "Naredbe korisnika"
+.SH IME
+pstree \- prikaže stablo procesa
+.SH UPORABA
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIattr\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fI\ pid\fP,\fB\ \-\-highlight\-pid\ \fP\fIpid\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fIns\fP] [\fB\-p\fP,\fB\ \-\-show\-pids\fP]
+[\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP] [\fB\-u\fP,\fB\ \-\-uid\-changes\fP]
+[\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIpid\fP,\fB\ \fP\fIuser\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH OPIS
+\fBpstree\fP prikaže pokrenute procese kao stablo. Stablo je ukorijenjeno na
+\fIpid\fP ili \fBinit\fP ako je \fIpid\fP izostavljen. Ako je navedeno korisniÄko
+ime, prikaže sva stabla procesa ukorijenjena u procesima u vlasništvu tog
+korisnika.
+.PP
+\fBpstree\fP vizualno spaja identiÄne grane stavljajući ih u uglate zagrade i
+dodajući im prefiks s brojem ponavljanja, na pr.
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+postaje
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+Dretve potomka procesa nalaze se ispod roditeljskog procesa i prikazuju se s
+imenom procesa u vitiÄastim zagradama, na pr.
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+Ako je \fBpstree\fP pozvan kao \fBpstree.x11\fP, tada će na kraju retka zatražiti
+od korisnika da pritisne Enter i neće se vratiti dok se to ne napravi. Ovo
+je korisno kada se \fBpstree\fP izvšava u xterminalu.
+.PP
+Određeni parametri kernela ili montiranja, poput opcije \fIhidepid\fP za
+procfs, sakrit će informacije za neke procese. U tim će situacijama
+\fBpstree\fP pokušati izgraditi stablo bez ovih informacija, pokazujući imena
+procesa kao upitnike.
+
+.SH OPCIJE
+.IP \fB\-a\fP
+Pokaže argumente naredbenog retka. Ako se naredbeni redak procesa isprazni,
+taj je proces prikazan u zagradama. \fB\-a\fP implicitno onemogućuje sažimanje
+za procese, ali ne i dretvi.
+.IP \fB\-A\fP
+Koristi ASCII znakove za crtanje stabla.
+.IP \fB\-c\fP
+Onemogući sažimanje identiÄnih podstabala. Zadano, podstabla se sažimaju kad
+god je to moguće.
+.IP \fB\-C\fP
+Oboji ime postupka prema zadanom atributu. Trenutno \fBpstree\fP prihvaća samo
+\fBage\fP koji oboji ovisno o dobi procesa. Procesi noviji od 60 sekundi su
+zeleni, noviji od jednog sata su žuti, a preostali su crveni.
+.IP \fB\-g\fP
+Prikaže PGID\-ove. ID\-ovi grupa procesa pokazani su u decimalnim brojevima u
+zagradama nakon imena svakog procesa. Ako su pokazani i PID\-ovi i PGID\-ovi,
+onda se prvo pokazuju PID\-ovi.
+.IP \fB\-G\fP
+Koristi znakove za crtanje po VT100.
+.IP \fB\-h\fP
+Istakne trenutni proces i njegove pretke. Ovo nije dopušteno ako terminal ne
+podržava isticanje ili ako se u podstablu ne pokazuje niti trenutni postupak
+niti bilo koji od njegovih predaka.
+.IP \fB\-H\fP
+Poput \fB\-h\fP, ali umjesto toga istakne navedeni postupak. Za razliku od
+\fB\-h\fP, \fBpstree\fP ne uspijeva kada se koristi \fB\-H\fP ako nije isticanje
+dostupno.
+.IP \fB\-l\fP
+Prikaže duge redove. Zadano, redci su skraćeni ili na varijablu okoline
+COLUMNS ili na Å¡irinu zaslona. Ako niti jedna od ovih metoda ne radi,
+koristi se zadano, 132 stupca.
+.IP \fB\-n\fP
+Razvrsta procese s istim roditeljem po PID\-u umjesto po imenu. (NumeriÄko
+sortiranje.)
+.IP \fB\-N\fP
+Prikaže pojedinaÄna stabla za svaki imenski prostor specificiranog
+tipa. Dostupn su ove vrste: \fIipc\fP, \fImnt\fP, \fInet\fP, \fIpid\fP, \fItime\fP,
+\fIuser\fP, \fIuts\fP. ObiÄni korisnici nemaju pristup informacijama o procesima
+drugih korisnika, pa će izlaz biti ograniÄen.
+.IP \fB\-p\fP
+Pokaže PID\-ove. PID\-ovi su prikazani kao decimalni brojevi u zagradama nakon
+imena svakog procesa. \fB\-p\fP implicitno onemogućuje sažimanje.
+.IP \fB\-s\fP
+Prikaže roditeljske procese navedenog procesa.
+.IP \fB\-S\fP
+Prikaže prijelaze imenskih prostora. Poput \fB\-N\fP, ali izlaz je ograniÄen kad
+se to izvrÅ¡ava obiÄni korisnik.
+.IP \fB\-t\fP
+Ako su dostupna, pokaže puna imena dretvi.
+.IP \fB\-T\fP
+Sakrije dretve i pokaže samo procese.
+.IP \fB\-u\fP
+Prikaže UID prijelaze. Kad god se UID procesa razlikuje od UID\-a njegovog
+roditelja, novi se UID prikaže u zagradama nakon imena procesa.
+.IP \fB\-U\fP
+Koristi UTF\-8 (Unicode) znakove za linije za crtanje. Pod Linuxom 1.1\-54 i
+novijim, UTF\-8 naÄin rada se unosi na konzolu s \fBecho \-e '\033%8'\fP, a
+napušta se s \fBecho \-e '\033%@'\fP.
+.IP \fB\-V\fP
+Pokaže informacije o inaÄici.
+.IP \fB\-Z\fP
+Pokaže trenutne sigurnosne atribute procesa. Za SELinux sustave to će biti
+sigurnosni kontekst.
+.SH FILES
+.TP
+/proc
+lokacija proc datoteÄnog sustava
+.SH BUGS
+Neki skupovi znakova mogu biti nekompatibilni s VT100 znakovima.
+.SH "POGLEDAJTE TAKOÄER"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/man-po/ko.po b/man-po/ko.po
new file mode 100644
index 0000000..0404870
--- /dev/null
+++ b/man-po/ko.po
@@ -0,0 +1,1356 @@
+# Korean translation of the psmisc package.
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Seong-ho Cho <darkcircle.0426@gmail.com>, 2022, 2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.7-rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2024-02-14 11:00+0900\n"
+"Last-Translator: Seong-ho Cho <darkcircle.0426@gmail.com>\n"
+"Language-Team: Korean <translation-team-ko@googlegroups.com>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.4.2\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr "2022-11-02"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "ì‚¬ìš©ìž ëª…ë ¹"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "ì´ë¦„"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser - íŒŒì¼ ë˜ëŠ” ì†Œì¼“ì„ ì‚¬ìš©í•˜ëŠ” 프로세스를 ì‹ë³„합니다"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "개요"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<E<lt>ì˜ì—­E<gt>>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<E<lt>시그ë„E<gt>>] ] I<E<lt>ì´ë¦„E<gt>\t> ..."
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "설명"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid "B<fuser> displays the PIDs of processes using the specified files or file systems. In the default display mode, each file name is followed by a letter denoting the type of access:"
+msgstr "B<fuser> 는 지정 íŒŒì¼ ë˜ëŠ” íŒŒì¼ ì‹œìŠ¤í…œì„ ì‚¬ìš©í•˜ëŠ” í”„ë¡œì„¸ìŠ¤ì˜ PID를 나타냅니다. 기본 표시 모드ì—ì„œ, ê° íŒŒì¼ ì´ë¦„ 다ìŒì—는 ì ‘ê·¼ 형ì‹ì„ 나타내는 문ìžê°€ ë”°ë¼ì˜µë‹ˆë‹¤:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "현재 디렉터리입니다."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "실행하고 있는 실행 파ì¼ìž…니다."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "파ì¼ì„ 엽니다. B<f> 는 기본 표시 모드ì—ì„œ ìƒëžµí•©ë‹ˆë‹¤."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr "ê¸°ë¡ ëª©ì ìœ¼ë¡œ 파ì¼ì„ 엽니다. B<F> 는 기본 표시 모드ì—ì„œ ìƒëžµí•©ë‹ˆë‹¤."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "루트 디렉터리입니다."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "ë©”ëª¨ë¦¬ì— ë§¤í•‘í•œ íŒŒì¼ ë˜ëŠ” 공유 ë¼ì´ë¸ŒëŸ¬ë¦¬ìž…니다."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr "ìž…ë ¥ ìžë¦¬ì´ë©°, 기본 표시 모드ì—ì„œ ìƒëžµí•©ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid "B<fuser> returns a non-zero return code if none of the specified files is accessed or in case of a fatal error. If at least one access has been found, B<fuser> returns zero."
+msgstr "B<fuser> 는 지정 파ì¼ì— 접근한 사용ìžê°€ 없거나 치명ì ì¸ 오류가 ìžˆì„ ê²½ìš°ì— 0ì´ ì•„ë‹Œ 코드 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤. ì ì–´ë„ 하나 ì´ìƒì˜ ì ‘ê·¼ ì‚¬ìš©ìž ë˜ëŠ” 프로세스를 찾으면, B<fuser>ì—ì„œ 0ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid "In order to look up processes using TCP and UDP sockets, the corresponding name space has to be selected with the B<-n> option. By default B<fuser> will look in both IPv6 and IPv4 sockets. To change the default behavior, use the B<-4> and B<-6> options. The socket(s) can be specified by the local and remote port, and the remote address. All fields are optional, but commas in front of missing fields must be present:"
+msgstr "TCP와 UDP 소켓으로 프로세스를 찾아보려면, 해당 ì´ë¦„ ì˜ì—­ì„ B<-n> 옵션으로 ì„ íƒí•´ì•¼í•©ë‹ˆë‹¤. B<fuser>는 기본ì ìœ¼ë¡œ IPv6와 IPv4 ì†Œì¼“ì„ ë‘˜ 다 찾아봅니다. 기본 ë™ìž‘ì„ ë°”ê¾¸ë ¤ë©´ B<-4>와 B<-6> ì˜µì…˜ì„ ì‚¬ìš©í•˜ì‹­ì‹œì˜¤. ì†Œì¼“ì€ ë¡œì»¬ ë˜ëŠ” ì›ê²© í¬íŠ¸, ì›ê²© 주소로 지정할 수 있습니다. 모든 필드는 옵션ì´ì§€ë§Œ, 빠진 입력란 ì•žì—는 반드시 쉼표를 넣어야 합니다:"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<E<lt>로컬_í¬íŠ¸E<gt>>][,[I<E<lt>ì›ê²©_호스트E<gt>>][,[I<E<lt>ì›ê²©_í¬íŠ¸E<gt>>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid "Either symbolic or numeric values can be used for IP addresses and port numbers."
+msgstr "기호 ë¬¸ìž ë˜ëŠ” ìˆ«ìž ê°’ì„ IP 주소와 í¬íŠ¸ 번호로 사용할 수 있습니다."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid "B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr "B<fuser> 는 PIDë§Œì„ í‘œì¤€ 출력으로 ë‚´ë³´ë‚´ë©° 나머지는 표준 오류로 내보냅니다."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "옵션"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid "Show all files specified on the command line. By default, only files that are accessed by at least one process are shown."
+msgstr "ëª…ë ¹í–‰ì— ì§€ì •í•œ 모든 파ì¼ì„ 나타냅니다. 기본ì ìœ¼ë¡œ 최소한 하나 ì´ìƒì˜ 프로세스로 접근한 파ì¼ë§Œ 나타납니다."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "B<-m> 옵션과 ë™ì¼í•˜ë©°, POSIX 호환 목ì ìœ¼ë¡œ 사용합니다."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "조용히 무시하며, POSIX 호환 목ì ìœ¼ë¡œ 사용합니다."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid "Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, SIGKILL is sent. An B<fuser> process never kills itself, but may kill other B<fuser> processes. The effective user ID of the process executing B<fuser> is set to its real user ID before attempting to kill."
+msgstr "파ì¼ì— 접근하는 프로세스를 강제로 ë•ë‹ˆë‹¤. B<->I<E<lt>시그ë„E<gt>\\/>ë¡œ 바꾸지 않으면 SIGKILL 시그ë„ì„ ë³´ëƒ…ë‹ˆë‹¤. B<fuser> 프로세스 ìžì²´ëŠ” 강제로 ë내지 않습니다만, 다른 B<fuser> 프로세스는 강제로 ë낼 수 있습니다. B<fuser>를 실행하는 í”„ë¡œì„¸ìŠ¤ì˜ í•´ë‹¹ ì‚¬ìš©ìž ID는 강제로 ë내기 ì „ì— ì‹¤ì œ ì‚¬ìš©ìž IDë¡œ 설정합니다."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid "Ask the user for confirmation before killing a process. This option is silently ignored if B<-k> is not present too."
+msgstr "프로세스를 강제로 ë내기 ì „ì— ì‚¬ìš©ìžì—게 확ì¸í•©ë‹ˆë‹¤. ì´ ì˜µì…˜ì€ B<-k> ì˜µì…˜ì´ ì—†ì„ ë–„ë„ ì¡°ìš©ížˆ 무시합니다."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid "For the name space B<file> let all comparisons be based on the inodes of the specified file(s) and never on the file names even on network based file systems."
+msgstr "ì´ë¦„ ì˜ì—­ì— 대해 B<E<lt>파ì¼E<gt>>ì„ ì§€ì •í•œ 파ì¼ì˜ ì•„ì´ë…¸ë“œì™€ ëª¨ë‘ ë¹„êµí•˜ë©°, ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œì˜ íŒŒì¼ ì´ë¦„ì— ëŒ€í•´ì„œëŠ” 수행하지 않습니다."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "알려진 모든 ì‹œê·¸ë„ ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< E<lt>ì´ë¦„E<gt>>, B<--mount >I<E<lt>ì´ë¦„E<gt>>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid "I<NAME> specifies a file on a mounted file system or a block device that is mounted. All processes accessing files on that file system are listed. If a directory is specified, it is automatically changed to I<NAME>/ to use any file system that might be mounted on that directory."
+msgstr "I<E<lt>ì´ë¦„E<gt>> ì—는 마운트한 íŒŒì¼ ì‹œìŠ¤í…œì´ë‚˜ 마운트한 ë¸”ë¡ ìž¥ì¹˜ì— ìžˆëŠ” 파ì¼ì„ 지정합니다. 해당 íŒŒì¼ ì‹œìŠ¤í…œì˜ íŒŒì¼ì— 접근하는 모든 프로세스를 나타냅니다. 디렉터리를 지정했다면, ìžë™ìœ¼ë¡œ I<E<lt>ì´ë¦„E<gt>>/ 으로 바꾸어 해당 ë””ë ‰í„°ë¦¬ì— ë§ˆìš´íŠ¸í•œ íŒŒì¼ ì‹œìŠ¤í…œì„ í™œìš©í•©ë‹ˆë‹¤."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid "Request will be fulfilled only if I<NAME> specifies a mountpoint. This is an invaluable seat belt which prevents you from killing the machine if I<NAME> happens to not be a filesystem."
+msgstr "I<E<lt>ì´ë¦„E<gt>>으로 마운트 지ì ì„ ì§€ì •í–ˆì„ ë•Œë§Œ ìš”ì²­ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. I<E<lt>ì´ë¦„E<gt>>ì´ íŒŒì¼ ì‹œìŠ¤í…œì— ì—†ì„ë•Œ 머신ì—ì„œ ì‚¬ìš©ìž ì—¬ëŸ¬ë¶„ì˜ ê°•ì œ í‡´ì¶œì„ ë§‰ëŠ” 귀중한 안전장치입니다."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid "Kill only processes which have write access. This option is silently ignored if B<-k> is not present too."
+msgstr "ê¸°ë¡ ì ‘ê·¼ì„ í•˜ê³  있는 프로세스만 강제로 ë냅니다. B<-k> ì˜µì…˜ì´ ì—†ì„ ë•Œë„ ì´ ì˜µì…˜ì€ ì¡°ìš©ížˆ 무시합니다."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< E<lt>ì´ë¦„ì˜ì—­E<gt>>, B<--namespace >I<E<lt>ì´ë¦„ì˜ì—­E<gt>>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid "Select a different name space. The name spaces B<file> (file names, the default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are supported. For ports, either the port number or the symbolic name can be specified. If there is no ambiguity, the shortcut notation I<name>B</>I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr "다른 ì´ë¦„ ì˜ì—­ì„ ì„ íƒí•©ë‹ˆë‹¤. B<file>(íŒŒì¼ ì´ë¦„, 기본), B<udp>(로컬 UDP í¬íŠ¸), B<tcp>(로컬 TCP í¬íŠ¸) ì´ë¦„ ì˜ì—­ì„ 지ì›í•©ë‹ˆë‹¤. í¬íŠ¸ì˜ 경우 í¬íŠ¸ 번호 ë˜ëŠ” 심볼 ì´ë¦„ 둘 다 지ì›í•©ë‹ˆë‹¤. 햇갈리지만 않는다면 I<E<lt>ì´ë¦„E<gt>>B</>I<E<lt>ì˜ì—­E<gt>> (예: I<80>B</>I<tcp>) 표기 ë°©ì‹ì„ 활용할 수 있습니다."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid "Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not be used with B<-s>."
+msgstr "ë™ìž‘ ë‚´ìš© ì¶œë ¥ì„ í•˜ì§€ 않습니다. ì´ ëª¨ë“œì—ì„œ B<-u>, B<-v> ì˜µì…˜ì€ ë¬´ì‹œí•©ë‹ˆë‹¤. B<-a> ì˜µì…˜ì€ B<-s> 옵션과 함께 사용하면 안ë©ë‹ˆë‹¤."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<E<lt>시그ë„E<gt>>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid "Use the specified signal instead of SIGKILL when killing processes. Signals can be specified either by name (e.g., B<-HUP>) or by number (e.g., B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr "프로세스를 강제로 ë낼 ë•Œ SIGKILL 대신 내보낼 지정 시그ë„ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. 시그ë„ì€ ì´ë¦„(예: B<-HUP>) ë˜ëŠ” 번호(예: B<-1>)ë¡œ 지정할 수 있습니다. ì´ ì˜µì…˜ì€ B<-k> ì˜µì…˜ì„ ì‚¬ìš©í•˜ì§€ 않으면 조용히 무시합니다."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "ê° PIDì— í”„ë¡œì„¸ìŠ¤ ì†Œìœ ìž ì‚¬ìš©ìž ì´ë¦„ì„ ë¶™ìž…ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid "Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, USER and COMMAND are similar to B<ps>. ACCESS shows how the process accesses the file. Verbose mode will also show when a particular file is being accessed as a mount point, knfs export or swap file. In this case B<kernel> is shown instead of the PID."
+msgstr "장황한 출력 모드. 프로세스를 B<ps> ë°©ì‹ìœ¼ë¡œ 나타냅니다. PID, 사용ìž, ëª…ë ¹ì„ B<ps>와 비슷하게 나타냅니다. ì ‘ê·¼ì—서는 í”„ë¡œì„¸ìŠ¤ì˜ íŒŒì¼ ì ‘ê·¼ ë°©ì‹ì„ 나타냅니다. ì¼ë¶€ 파ì¼ì´ 마운트 지ì , knfs ìµìŠ¤í¬íŒ…, 스왑 파ì¼ë¡œ ì ‘ê·¼í–ˆì„ ê²½ìš°ì—ë„ ìž¥í™©í•œ 출력 모드로 나타냅니다. ì´ ê²½ìš° B<kernel>ì´ PID 대신 나타납니다."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "버전 정보를 나타냅니다."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid "Search only for IPv4 sockets. This option must not be used with the B<-6> option and only has an effect with the tcp and udp namespaces."
+msgstr "IPv4 소켓만 검색합니다. ì´ ì˜µì…˜ì€ B<-6> 옵션과 사용하면 안ë˜ë©°, tcp ë° udp ì´ë¦„ ì˜ì—­ì—만 해당합니다."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid "Search only for IPv6 sockets. This option must not be used with the B<-4> option and only has an effect with the tcp and udp namespaces."
+msgstr "IPv6 소켓만 검색합니다. ì´ ì˜µì…˜ì€ B<-4> 옵션과 사용하면 안ë˜ë©°, tcp ë° udp ì´ë¦„ ì˜ì—­ì—만 해당합니다."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "파ì¼"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "proc íŒŒì¼ ì‹œìŠ¤í…œì˜ ìœ„ì¹˜ìž…ë‹ˆë‹¤"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "예제"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr "ì–´ë–¤ 힉으로든 /home íŒŒì¼ ì‹œìŠ¤í…œì— ì ‘ê·¼í•˜ê³  있는 모든 프로세스를 강제로 ë냅니다."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<E<lt>명령E<gt>>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "/dev/ttyS1ì„ í™œìš©í•˜ëŠ” 프로세스가 없다면 I<<명령>>ì„ ì‹¤í–‰í•©ë‹ˆë‹¤."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "(로컬) 텔넷 í¬íŠ¸ì˜ 모든 프로세스를 나타냅니다."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "제약사항"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid "Processes accessing the same file or file system several times in the same way are only shown once."
+msgstr "ë™ì¼í•œ íŒŒì¼ ë˜ëŠ” íŒŒì¼ ì‹œìŠ¤í…œì— ë™ì¼í•œ ë°©ì‹ìœ¼ë¡œ 여러번 접근하는 프로세스는 한번만 나타냅니다."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid "If the same object is specified several times on the command line, some of those entries may be ignored."
+msgstr "ë™ì¼í•œ 개체를 ëª…ë ¹í–‰ì— ì—¬ëŸ¬ë²ˆ 지정하면, ì¼ë¶€ í•­ëª©ì€ ë¬´ì‹œí•©ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid "B<fuser> may only be able to gather partial information unless run with privileges. As a consequence, files opened by processes belonging to other users may not be listed and executables may be classified as mapped only."
+msgstr "B<fuser>는 권한 ì—†ì´ ì‹¤í–‰í•  경우 ì¼ë¶€ 정보를 가져오지 못할 수 있습니다. ì´ ê²°ê³¼ë¡œ, 다른 사용ìžê°€ 소유한 프로세스ì—ì„œ ì—° 파ì¼ì€ 목ë¡ì— 나타나지 않으며, 매핑한 실행 파ì¼ë¡œ 분류한 요소만 나타납니다."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid "B<fuser> cannot report on any processes that it doesn't have permission to look at the file descriptor table for. The most common time this problem occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-root user. In this case B<fuser> will report no access."
+msgstr "B<fuser>는 ê¶Œí•œì´ ì—†ëŠ” íŒŒì¼ ì„œìˆ ìž í…Œì´ë¸”ì˜ í”„ë¡œì„¸ìŠ¤ 정보를 나타낼 수는 없습니다. ëŒ€ë¶€ë¶„ì˜ ê²½ìš° ì´ëŸ° 문제는 B<fuser>를 ì¼ë°˜ 사용ìžë¡œ 실행할 ë•Œ TCP ë˜ëŠ” UDP ì†Œì¼“ì„ ì°¾ì•„ë³¼ ë•Œ 나타납니다. ì´ ê²½ìš° B<fuser>ì—서는 ì ‘ê·¼ ê¶Œí•œì´ ì—†ë‹¤ê³  알려ì¤ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid "Installing B<fuser> SUID root will avoid problems associated with partial information, but may be undesirable for security and privacy reasons."
+msgstr "B<fuser> SUID 루트를 설치하면 ì¼ë¶€ 정보를 조회하는 관련 문제를 막아주긴 하지만, 보안 ë° ì‚¬ìƒí™œ 문제로 ì ì ˆí•˜ì§€ 못합니다."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid "B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched with kernels older than 1.3.78."
+msgstr "B<udp> 와 B<tcp> ì´ë¦„ ì˜ì—­, 유닉스 ë„ë©”ì¸ ì†Œì¼“ì€ 1.3.78 버전 ì´ì „ 커ë„ì—서는 검색할 수 없습니다."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "ì»¤ë„ ì ‘ê·¼ì€ B<-v> 옵션으로만 나타납니다."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid "The B<-k> option only works on processes. If the user is the kernel, B<fuser> will print an advice, but take no action beyond that."
+msgstr "B<-k> 옵션만 프로세스를 처리할 수 있습니다. 사용ìžê°€ 커ë„ì´ë¼ë©´, B<fuser> ì—ì„œ ì§€ì¹¨ì„ ë‚˜íƒ€ë‚´ê¸´ 하지만 ê·¸ ì´ìƒì˜ ë™ìž‘ì€ ì·¨í•˜ì§€ 않습니다."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid "B<fuser> will not see block devices mounted by processes in a different mount namespace. This is due to the device ID shown in the process' file descriptor table being from the process namespace, not fuser's; meaning it won't match."
+msgstr "B<fuser>는 다른 마운트 ì´ë¦„ ì˜ì—­ì—ì„œ 프로세스가 마운팅한 ë¸”ë¡ ìž¥ì¹˜ëŠ” 보여주지 않습니다. fuserê°€ ì•„ë‹Œ 프로세스 ì´ë¦„ ì˜ì—­ì˜ 프로세스 íŒŒì¼ ì„œìˆ ìž í…Œì´ë¸”ì— ìž¥ì¹˜ IDê°€ 나타나서 ê²°ê³¼ì ìœ¼ë¡œ ì¼ì¹˜í•˜ì§€ 않기 때문입니다."
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "버그"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid "B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, even if you don't have that device configured. There may be other devices it does this for too."
+msgstr "B<fuser -m /dev/sgX> 명령 (ë˜ëŠ” B<-k> 플래그로 강제로 ë냄) ì€ í•´ë‹¹ 장치를 설정하지 ì•Šì•„ë„ ëª¨ë“  프로세스를 ë³´ì—¬ì¤ë‹ˆë‹¤. ì´ëŸ° ë™ìž‘ì„ ì·¨í•˜ëŠ” 다른 장치가 ìžˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid "The mount B<-m> option will match any file within the same device as the specified file, use the B<-M> option as well if you mean to specify only the mount point."
+msgstr "B<-m> 마운트 ì˜µì…˜ì€ ë™ì¼í•œ 장치ì—ì„œ 지정한 파ì¼ê³¼ ì¼ì¹˜í•˜ëŠ” ì–´ë–¤ 파ì¼ì´ë“  찾겠지만, 마운트 지ì ì„ 지정하기만 í•  경우 B<-M> ì˜µì…˜ì„ í™œìš©í•˜ì‹­ì‹œì˜¤."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid "B<fuser> will not match mapped files, such as a process' shared libraries if they are on a B<btrfs>(5) filesystem due to the device IDs being different for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr "B<fuser>는 B<stat>(2) ê³¼ I</proc/E<lt>PIDE<gt>/maps>ì˜ ìž¥ì¹˜ IDê°€ ë‹¬ë¼ B<btrfs>(5) íŒŒì¼ ì‹œìŠ¤í…œì—ì„œì˜ ê²½ìš° 프로세스 공유 ë¼ì´ë¸ŒëŸ¬ë¦¬ ê°™ì€ ë§¤í•‘ 파ì¼ì„ 찾아내지 못합니다."
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "추가 참조"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+msgid "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "2023-06-17"
+msgstr "2023-06-17"
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall - 지정한 ì´ë¦„ì˜ í”„ë¡œì„¸ìŠ¤ë¥¼ 강제로 ë냅니다"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid "B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<name> ..."
+msgstr "B<killall> [B<-Z>,B<\\ --context> I<E<lt>패턴E<gt>>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<E<lt>시간E<gt>>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<E<lt>시그ë„E<gt>>,\\ B<->I<E<lt>시그ë„E<gt>>] [B<-u>,B<\\ --user> I<E<lt>사용ìžE<gt>>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<E<lt>시간E<gt>>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<E<lt>ì´ë¦„E<gt>> ..."
+
+#. type: Plain text
+#: ../doc/killall.1:41
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-l>, B<--list>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid "B<killall> sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent."
+msgstr "B<killall>ì€ ì§€ì • ëª…ë ¹ì— ì¼ì¹˜í•˜ëŠ” 모든 실행 í”„ë¡œì„¸ìŠ¤ì— ì‹œê·¸ë„ì„ ë³´ëƒ…ë‹ˆë‹¤. 지정한 ì‹œê·¸ë„ ì´ë¦„ì´ ì—†ë‹¤ë©´ SIGTERMì„ ë³´ëƒ…ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+msgid "Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr "시그ë„ì€ ì´ë¦„(예: B<-HUP> ë˜ëŠ” B<-SIGHUP>), 번호(예: B<-i>), B<-s> 옵션으로 지정할 수 있습니다."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid "If the command name is not regular expression (option B<-r>) and contains a slash (B</>), processes executing that particular file will be selected for killing, independent of their name."
+msgstr "If the command name is not regular expression (option B<-r>) and contains a slash (B</>), processes executing that particular file will be selected for killing, independent of their name."
+# msgstr "명령 ì´ë¦„ì´ ì •ê·œ 표현ì‹ì´ ì•„ë‹ ê²½ìš°(B<-r> 옵션> 그리고 슬래시(B</>) 문ìžê°€ 들어갔다면, 해당 ì´ë¦„과는 별개로 강제로 ë내려는 목ì ìœ¼ë¡œ ì¼ë¶€ 파ì¼ì„ 실행하는 프로세스를 ì„ íƒí•©ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid "B<killall> returns a zero return code if at least one process has been killed for each listed command, or no commands were listed and at least one process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-zero otherwise."
+msgstr "B<killall>ì€ ê° ëª…ë ¹ì— ëŒ€í•´ 최소한 í•˜ë‚˜ì˜ í”„ë¡œì„¸ìŠ¤ë¥¼ 강제로 ëëƒˆì„ ê²½ìš°, ë˜ëŠ” B<-u>와 B<-Z> 검색 ì¡°ê±´ì— ì¼ì¹˜í•˜ëŠ” 하나 ì´ìƒì˜ 프로세스가 있지만 ëª…ë ¹ì€ ë‚˜íƒ€ë‚˜ì§€ ì•Šì•˜ì„ ê²½ìš° 0 코드를 반환합니다. ì´ ê²½ìš°ê°€ 아니ë¼ë©´ B<killall>ì€ 0ì´ ì•„ë‹Œ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid "A B<killall> process never kills itself (but may kill other B<killall> processes)."
+msgstr "A B<killall> 프로세스는 ìžì‹ ì„ 강제로 ë내지 않습니다(만 다른 B<killall> 프로세스를 강제로 ë낼 수 있습니다)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid "Require an exact match for very long names. If a command name is longer than 15 characters, the full name may be unavailable (i.e. it is swapped out). In this case, B<killall> will kill everything that matches within the first 15 characters. With B<-e>, such entries are skipped. B<killall> prints a message for each skipped entry if B<-v> is specified in addition to B<-e>."
+msgstr "아주 긴 ì´ë¦„ì— ì •í™•í•˜ê²Œ ì¼ì¹˜í•´ì•¼í•©ë‹ˆë‹¤. 명령 ì´ë¦„ì´ 15ìž ì´ìƒì´ë©´ ì „ì²´ ì´ë¦„ì„ ì‚¬ìš©í•  수 ì—†ì„ì§€ë„ ëª¨ë¦…ë‹ˆë‹¤(예: ìŠ¤ì™€í•‘í–ˆì„ ë–„). ì´ ê²½ìš°, B<killall>ì€ ì²˜ìŒ 15ê¸€ìž ë‚´ì— ì¼ì¹˜í•˜ëŠ 모든 대ìƒì„ 강제로 ëë‚´ë©°, B<-e> ì˜µì…˜ì„ ì§€ì •í•˜ë©´ ì´ í•­ëª©ì€ ë¬´ì‹œí•©ë‹ˆë‹¤. B<killall>ì€ B<-v> 옵션과 B<-e> ì˜µì…˜ì„ í•¨ê»˜ 지정하면 무시한 ê° í•­ëª©ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "대소문ìžë¥¼ 구별하지 ì•Šê³  프로세스 ì´ë¦„ì„ ê²€ìƒ‰í•©ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid "Kill the process group to which the process belongs. The kill signal is only sent once per group, even if multiple processes belonging to the same process group were found."
+msgstr "지정 í”„ë¡œì„¸ìŠ¤ì— ì†í•œ 프로세스 ê·¸ë£¹ì„ ê°•ì œë¡œ ë냅니다. ê°•ì œ 종료 시그ë„ì€ ë™ì¼í•œ 프로세스 ê·¸ë£¹ì— ì—¬ëŸ¬ 프로세스가 있다 하ë”ë¼ë„ 그룹당 한번씩만 보냅니다."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "강제로 ë내기 ì „ 대화ì‹ìœ¼ë¡œ 확ì¸í•©ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid "Match against the PID namespace of the given PID. The default is to match against all namespaces."
+msgstr "주어진 PID ì˜ PID ì´ë¦„ ì˜ì—­ê³¼ ì¼ì¹˜í•˜ëŠ” í•­ëª©ì„ ì°¾ìŠµë‹ˆë‹¤. 기본 ë™ìž‘ì€ ëª¨ë“  ì´ë¦„ ì˜ì—­ì— ì¼ì¹˜í•˜ëŠ” í•­ëª©ì˜ ê²€ìƒ‰ìž…ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid "Match only processes that are older (started before) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr "지정한 시간보다 ì˜¤ëž˜ëœ (ì´ì „ì˜) 프로세스만 검색합니다. ì‹œê°„ì€ ì†Œìˆ«ì  ìˆ«ìž ë‹¤ìŒ ë‹¨ìœ„ë¥¼ 붙여 지정합니다. 지정 단위는 s,m,h,d,w,M,yì´ë©°, ê°ê° ì´ˆ,분,시간,ì¼,주,ì›”,ë…„ì„ ì˜ë¯¸í•©ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "강제로 ë낸 프로세스가 ì—†ë”ë¼ë„ ì–´ë–¤ ë©”ì‹œì§€ë„ ì¶œë ¥í•˜ì§€ 않습니다."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid "Interpret process name pattern as a POSIX extended regular expression, per B<regex>(3)."
+msgstr "프로세스 ì´ë¦„ íŒ¨í„´ì„ B<regex>(3)ì— ë”°ë¥¸ POSIX 확장 ì •ê·œ 표현ì‹ìœ¼ë¡œ í•´ì„합니다."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<E<lt>시그ë„E<gt>>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "SIGTERM 대신 지정 시그ë„ì„ ë³´ëƒ…ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid "Kill only processes the specified user owns. Command names are optional."
+msgstr "지정 사용ìžê°€ 소유한 프로세스만 강제로 ë냅니다. 명령 ì´ë¦„ì€ ì˜µì…˜ìž…ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "시그ë„ì„ ì œëŒ€ë¡œ ë³´ëƒˆì„ ê²½ìš° 알려ì¤ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid "Wait for all killed processes to die. B<killall> checks once per second if any of the killed processes still exist and only returns if none are left. Note that B<killall> may wait forever if the signal was ignored, had no effect, or if the process stays in zombie state."
+msgstr "모든 프로세스를 ë낼 때까지 기다립니다. B<killall> ì—서는 강제로 ë낼 프로세스가 있는지 초단위로 확ì¸í•˜ë©° 남아있는 프로세스가 없어지면 종료 코드를 반환합니다. 참고로 B<killall>ì€ ì‹œê·¸ë„ì„ ë¬´ì‹œí–ˆì„ ê²½ìš°, 명령 결과가 나오지 않거나, 프로세스가 좀비 ìƒíƒœë¡œ 남아있다면 ê³„ì† ê¸°ë‹¤ë¦´ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid "Match only processes that are younger (started after) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr "지정한 시간보다 ìµœê·¼ì˜ (ì´í›„ì˜) 프로세스만 검색합니다. ì‹œê°„ì€ ì†Œìˆ«ì  ìˆ«ìž ë‹¤ìŒ ë‹¨ìœ„ë¥¼ 붙여 지정합니다. 지정 단위는 s,m,h,d,w,M,yì´ë©°, ê°ê° ì´ˆ,분,시간,ì¼,주,ì›”,ë…„ì„ ì˜ë¯¸í•©ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid "Specify security context: kill only processes having security context that match with given extended regular expression pattern. Must precede other arguments on the command line. Command names are optional."
+msgstr "보안 컨í…스트를 지정합니다. 지정한 확장 ì •ê·œ í‘œí˜„ì‹ íŒ¨í„´ì— ì¼ì¹˜í•˜ëŠ” 보안 컨í…ìŠ¤íŠ¸ì˜ í”„ë¡œì„¸ìŠ¤ë§Œ 강제로 ë냅니다. 명령행ì—ì„œ 다른 ì¸ìžë³´ë‹¤ ì•žì„œ 지정해야합니다. 명령 ì´ë¦„ì€ ì˜µì…˜ìž…ë‹ˆë‹¤."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "알려진 버그"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid "Killing by file only works for executables that are kept open during execution, i.e. impure executables can't be killed this way."
+msgstr "íŒŒì¼ ì´ë¦„으로 강제로 ë내는 ë™ìž‘ì€ í•´ë‹¹ 파ì¼ì„ ì—´ê³  있는 실행 파ì¼ì´ 파ì¼ì„ ì—´ê³  있는 ë™ì•ˆì—만 ë™ìž‘합니다. 예를 들면, ì´ ë°©ì‹ìœ¼ë¡œëŠ” ìž ê¹ ì‹¤í–‰í–ˆë‹¤ê°€ ë나는 실행 파ì¼ì„ 강제로 ë낼 수 없습니다."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid "Be warned that typing B<killall> I<name> may not have the desired effect on non-Linux systems, especially when done by a privileged user."
+msgstr "B<killall>ì„ ìž…ë ¥í•  ë•Œ I<E<lt>ì´ë¦„E<lt>>ì€ íŠ¹ížˆ ê¶Œí•œì„ ê°€ì§„ 사용ìžì— ì˜í•´ 리눅스 ì‹œìŠ¤í…œì´ ì•„ë‹Œ ê³³ì—ì„œ 예ìƒì¹˜ 못한 ë™ìž‘ì„ í•  수 있습니다."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid "B<killall -w> doesn't detect if a process disappears and is replaced by a new process with the same PID between scans."
+msgstr "B<killall -w> ëª…ë ¹ì€ í”„ë¡œì„¸ìŠ¤ê°€ 사ë¼ì ¸ì„œ ë™ì¼í•œ PID를 가진 새 프로세스로 ë°”ë€Œì—ˆì„ ê²½ìš° 해당 프로세스를 찾아내지 못합니다."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid "If processes change their name, B<killall> may not be able to match them correctly."
+msgstr "프로세스가 ì´ë¦„ì„ ë°”ê¾¸ì—ˆë‹¤ë©´, B<killall>ì—ì„œ 해당 프로세스를 정확하게 찾아낼 수 없습니다."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid "B<killall> has a limit of names that can be specified on the command line. This figure is the size of an unsigned long integer multiplied by 8. For most 32 bit systems the limit is 32 and similarly for a 64 bit system the limit is usually 64."
+msgstr "B<killall>ì€ ëª…ë ¹í–‰ì—ì„œ 지정할 수 있는 ì´ë¦„ì— ì œí•œì´ ìžˆìŠµë‹ˆë‹¤. ì´ êµ¬í˜„ì²´ëŠ” 8배수 비부호 거대 ì •ìˆ˜í˜•ì˜ ìµœëŒ€ í¬ê¸°ë§Œí¼ì— 해당합니다. 32비트 시스템ì—ì„œ 한계는 32ì´ë©°, 64비트 시스템ì—서는 64입니다."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<regex>(3)."
+msgstr "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "2021-12-01"
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr "peekfd - 실행 ì¤‘ì¸ í”„ë¡œì„¸ìŠ¤ì˜ íŒŒì¼ ì„œìˆ ìžë¥¼ 살펴봅니다"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<pid> [I<fd>] [I<fd>] ..."
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid "B<peekfd> attaches to a running process and intercepts all reads and writes to file descriptors. You can specify the desired file descriptor numbers or dump all of them."
+msgstr "B<peekfd>ì—서는 실행 ì¤‘ì¸ í”„ë¡œì„¸ìŠ¤ì— ì ‘ê·¼í•˜ì—¬ íŒŒì¼ ì„œìˆ ìžë¡œ ì½ê³  쓰는 모든 요소를 관찰합니다. ì›í•˜ëŠ” íŒŒì¼ ì„œìˆ ìž ë²ˆí˜¸ë¥¼ 지정하거나 모든 해당 요소를 ë¤í•‘í•  수 있습니다."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr "ë°”ì´íŠ¸ ì½ê¸° 쓰기 후 처리를 진행하지 않습니다."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr "ë¤í•‘ ë°”ì´íŠ¸ ì›ë³¸ì„ ì˜ë¯¸í•˜ëŠ” í—¤ë”를 나타내지 않습니다."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid "Also dump the requested file descriptor activity in any new child processes that are created."
+msgstr "새로 만든 새 하위 í”„ë¡œì„¸ìŠ¤ì— ëŒ€í•´ 요청 ë°›ì€ íŒŒì¼ ì„œìˆ ìž í™œë™ë„ ë¤í•‘합니다."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid "Remove duplicate read/writes from the output. If you're looking at a tty with echo, you might want this."
+msgstr "출력 ë‚´ìš©ì˜ ì¤‘ë³µ ì½ê¸°/쓰기를 제거합니다. tty를 echoë¡œ 찾아보고 있다면, ì•„ë§ˆë„ ì´ ì˜µì…˜ì„ ì›í•  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "버전 문ìžì—´ì„ 나타냅니다."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "ë„ì›€ë§ ë©”ì‹œì§€ë¥¼ 나타냅니다."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid "Not used but useful for the user to look at to get good file descriptor numbers."
+msgstr "사용하진 않지만 ì ì ˆí•œ íŒŒì¼ ì„œìˆ ìž ë²ˆí˜¸ë¥¼ 찾는 사용ìžì—ê² ìš”ê¸´í•  수 있습니다."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "환경"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "ë‚´ìš© ì—†ìŒ."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "진단"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr "ë‹¤ìŒ ì§„ë‹¨ 결과는 표준 오류로 출력합니다:"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<PID >I<E<lt>PIDE<gt>>B<ë²ˆì— ë¶™ì´ëŠ” 중 오류>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid "An unknown error occurred while attempted to attach to a process, you may need to be root."
+msgstr "í”„ë¡œì„¸ìŠ¤ì— ì ‘ê·¼ì„ ì‹œë„í•  ë•Œ ì•Œ 수 없는 오류가 나타나는ë°, ì´ ê²½ìš° 루트 ê³„ì •ì´ í•„ìš”í•©ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid "Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr "ì•„ë§ˆë„ ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì¼ì§€ë„ 모릅니다. 관찰 ì¤‘ì¸ í”„ë¡œì„¸ìŠ¤ê°€ 죽는다 하ë”ë¼ë„ 놀ë¼ì§€ 마십시오."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "ì €ìž"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "2020-09-09"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "리눅스\""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "리눅스 ì‚¬ìš©ìž ì„¤ëª…ì„œ"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog - í”„ë¡œì„¸ìŠ¤ì˜ í˜„ìž¬ 로그 경로를 나타냅니다"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<pid> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr "B<pslog> ëª…ë ¹ì€ í”„ë¡œì„¸ìŠ¤ 현재 ë™ìž‘ 로그를 나타냅니다."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid "Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr "Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME>ê°€ 2015ë…„ì— B<pslog>를 작성했습니다. E<.MT mulevito@gmail.com> E<.ME>ì—게 버그를 알려주십시오"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat - 프로세스 통계를 나타냅니다"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid "B<prtstat> prints the statistics of the specified process. This information comes from the B</proc/>I<pid>B</stat> file."
+msgstr "B<prtstat>ì€ ì§€ì • í”„ë¡œì„¸ìŠ¤ì˜ í†µê³„ë¥¼ 나타냅니다. ì´ ì •ë³´ëŠ” B</proc/>I<pid>B</stat> 파ì¼ì—ì„œ 가져옵니다."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "ì›ì‹œ 형ì‹ìœ¼ë¡œ 정보를 나타냅니다."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "B<prtstat>ì˜ ë²„ì „ 정보를 나타냅니다."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<pid>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "B<prtstat>ì´ ì‚¬ìš©í•˜ëŠ” ì •ë³´ì˜ ì¶œì²˜ë¥¼ 지정합니다."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "2021-06-21"
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree - 프로세스 트리를 나타냅니다"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<PID>,B<\\ >I<E<lt>사용ìžE<gt>>]"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid "B<pstree> shows running processes as a tree. The tree is rooted at either I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all process trees rooted at processes owned by that user are shown."
+msgstr "B<pstree> 는 실행 프로세스를 트리 형ì‹ìœ¼ë¡œ 나타냅니다. I<pid> ê°’ì„ ìƒëžµí•˜ë©´ I<pid> ë˜ëŠ” B<init>를 뿌리로 둡니다. ì‚¬ìš©ìž ì´ë¦„ì„ ì§€ì •í•˜ë©´, 해당 사용ìžë¥¼ 루트로 하여 해당 사용가 소유한 프로세스를 나타냅니다."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid "B<pstree> visually merges identical branches by putting them in square brackets and prefixing them with the repetition count, e.g."
+msgstr "B<pstree> 는 ì´ìƒì ì¸ 브랜치를 ê° ê´„í˜¸ ë‚´ë¡œ ì‹œê°ì ìœ¼ë¡œ 병합하고, ê·¸ ì•žì— ë°˜ë³µ 횟수를 붙여 나타냅니다. 예를 들면,"
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "를 다ìŒì²˜ëŸ¼ 나타냅니다"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid "Child threads of a process are found under the parent process and are shown with the process name in curly braces, e.g."
+msgstr "í”„ë¡œì„¸ìŠ¤ì˜ í•˜ìœ„ 스레드는 ìƒìœ„ 프로세스 아래서 ì°¾ì„ ìˆ˜ 있으며, 중괄호로 ê°ì‹¼ 프로세스 ì´ë¦„으로 나타냅니다. 예를 들면,"
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid "If B<pstree> is called as B<pstree.x11> then it will prompt the user at the end of the line to press return and will not return until that has happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr "B<pstree>를 B<pstree.x11>ë¡œ 호출하면, í–‰ 마지막ì—ì„œ 사용ìžì—게 리턴 키를 누르ë„ë¡ ìš”ì²­í•˜ë©°, 키를 누르지 않으면 ì–´ë–¤ ë™ìž‘ë„ ì·¨í•˜ì§€ 않습니다. B<pstree>를 xterminalì—ì„œ 실행할 경우 ì´ ì˜µì…˜ì´ ìš”ê¸´í•©ë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid "Certain kernel or mount parameters, such as the I<hidepid> option for procfs, will hide information for some processes. In these situations B<pstree> will attempt to build the tree without this information, showing process names as question marks."
+msgstr "procfsì˜ I<hidepid> 옵션 ê°™ì€ ì»¤ë„ ë˜ëŠ” 마운트 ì¸ìž 종류는 ì¼ë¶€ í”„ë¡œì„¸ìŠ¤ì˜ ì •ë³´ë¥¼ 숨ê¹ë‹ˆë‹¤. ì´ ê²½ìš° B<pstree>는 ì´ ì •ë³´ ì—†ì´ íŠ¸ë¦¬ë¥¼ 구성하여 해당 프로세스 ì´ë¦„ì€ ë¬¼ìŒí‘œë¡œ 나타냅니다."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid "Show command line arguments. If the command line of a process is swapped out, that process is shown in parentheses. B<-a> implicitly disables compaction for processes but not threads."
+msgstr "명령행 ì¸ìžë¥¼ 나타냅니다. í”„ë¡œì„¸ìŠ¤ì˜ ëª…ë ¹í–‰ì„ ìŠ¤ì™€í•‘í–ˆë‹¤ë©´, 해당 프로세스를 괄호로 ê°ì‹¸ì„œ 나타냅니다. B<-a> ì˜µì…˜ì€ ì•”ë¬µì ìœ¼ë¡œ 스레드 ë¿ë§Œ ì•„ë‹ˆë¼ í”„ë¡œì„¸ìŠ¤ì˜ ê°„ì†Œí™”ë¥¼ 막아ì¤ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "트리를 그려 나타낼 ë–„ 아스키 문ìžë¥¼ 사용합니다."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid "Disable compaction of identical subtrees. By default, subtrees are compacted whenever possible."
+msgstr "ì´ìƒì ì¸ 하위 íŠ¸ë¦¬ì˜ ê°„ì†Œí™”ë¥¼ 진행하지 않습니다. 기본ì ìœ¼ë¡œ 하위 트리는 가능하면 간소화합니다."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid "Color the process name by given attribute. Currently B<pstree> only accepts the value B<age> which colors by process age. Processes newer than 60 seconds are green, newer than an hour yellow and the remaining red."
+msgstr "주어진 ì†ì„±ì˜ 프로세스 ì´ë¦„ì„ ìƒ‰ìœ¼ë¡œ 구별합니다. 현재 B<pstree>는 프로세스 실행 경과 시간으로 ìƒ‰ìƒ êµ¬ë³„í•˜ëŠ” B<age> ì†ì„±ë§Œ 받아들입니다. 60ì´ˆ ì´ë‚´ë¡œ 실행한 프로세스는 녹색으로, 한시간 ì´ë‚´ë¡œ 실행한 프로세스는 황색으로, 나머지는 ì ìƒ‰ìœ¼ë¡œ 나타냅니다."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid "Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses after each process name. If both PIDs and PGIDs are displayed then PIDs are shown first."
+msgstr "PGID를 나타냅니다. 프로세스 그룹 ID는 ê° í”„ë¡œì„¸ìŠ¤ ì´ë¦„ 다ìŒì— 괄호로 ê°ì‹¼ 10진수로 나타냅니다. PID와 PGID를 둘 다 나타낸다면 PIDê°€ 먼저 나타납니다."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "VT100 ì„  그리기 문ìžë¥¼ 사용합니다."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid "Highlight the current process and its ancestors. This is a no-op if the terminal doesn't support highlighting or if neither the current process nor any of its ancestors are in the subtree being shown."
+msgstr "현재 프로세스와 ìƒìœ„ 프로세스를 강조합니다. í„°ë¯¸ë„ ê°•ì¡° ê¸°ëŠ¥ì´ ë™ìž‘하지 않거나 현재 프로세스 ë˜ëŠ” ìƒìœ„ 프로세스가 나타나지 않으면 ì´ ì˜µì…˜ì€ ë™ìž‘하지 않습니다."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid "Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr "B<-h> 옵션과 유사하지만, 대신 지정 프로세스를 강조합니다. B<-h> 옵션과는 달리, B<pstree> ëª…ë ¹ì€ ê°•ì¡° ê¸°ëŠ¥ì´ ë™ìž‘하지 ì•Šì„ ë•Œ B<-H> ì˜µì…˜ì„ ì‚¬ìš©í•˜ë©´ ë™ìž‘ì— ì‹¤íŒ¨í•©ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid "Display long lines. By default, lines are truncated to either the COLUMNS environment variable or the display width. If neither of these methods work, the default of 132 columns is used."
+msgstr "길게 í–‰ì„ í‘œì‹œí•©ë‹ˆë‹¤. 기본ì ìœ¼ë¡œ COLUMNS 환경 변수 ë˜ëŠ” 화면 표시 í­ì— ë”°ë¼ í–‰ì„ ìžë¦…니다. ë‘가지 ì–´ë–¤ ë°©ì‹ìœ¼ë¡œë“  ë™ìž‘하지 않는다면 132 ì»¬ëŸ¼ì„ ê¸°ë³¸ê°’ìœ¼ë¡œ 활용합니다."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid "Sort processes with the same parent by PID instead of by name. (Numeric sort.)"
+msgstr "ì´ë¦„ 대신 PIDë¡œ ë™ì¼í•œ ìƒìœ„ 프로세스를 정렬합니다. (ìˆ«ìž í¬ê¸°ìˆœ ì •ë ¬.)"
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid "Show individual trees for each namespace of the type specified. The available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Regular users don't have access to other users' processes information, so the output will be limited."
+msgstr "지정 형ì‹ì˜ ê° ì´ë¦„ ì˜ì—­ì— 대한 ê° íŠ¸ë¦¬ë¥¼ 나타냅니다. 가용 형ì‹ìœ¼ë¡œ I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>ê°€ 있습니다. ì¼ë°˜ 사용ìžëŠ” 다른 사용ìžì˜ 프로세스 정보를 ë³¼ 수 없기 때문ì—, 출력 ë‚´ìš©ì„ ì œí•œí•©ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid "Show PIDs. PIDs are shown as decimal numbers in parentheses after each process name. B<-p> implicitly disables compaction."
+msgstr "여러 PID를 나타냅니다. PID는 ê° í”„ë¡œì„¸ìŠ¤ ì´ë¦„ 다ìŒì— 괄호로 ë‘˜ëŸ¬ì‹¸ì¸ 10진 숫ìžë¡œ 나타냅니다. B<-p> 옵션으로는 암묵ì ìœ¼ë¡œ 간소화 ë™ìž‘ì„ ë§‰ì•„ì¤ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "지정 í”„ë¡œì„¸ìŠ¤ì˜ ìƒìœ„ 프로세스를 나타냅니다."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid "Show namespaces transitions. Like B<-N>, the output is limited when running as a regular user."
+msgstr "ì´ë¦„ì˜ì—­ ë³€í™˜ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. B<-N> 옵션과 유사하게, ì¼ë°˜ 사용ìžë¡œ 실행하는 경우 출력 ë‚´ìš©ì„ ì œí•œí•©ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "스레드가 있다면 ì „ì²´ ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "스레드는 숨기고 프로세스만 나타냅니다."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid "Show uid transitions. Whenever the uid of a process differs from the uid of its parent, the new uid is shown in parentheses after the process name."
+msgstr "UID ë³€í™˜ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ìƒìœ„ í”„ë¡œì„¸ìŠ¤ì˜ UID와 프로세스 UIDê°€ 달ë¼ì§€ëŠ” 언제든지, 새 UID를 해당 프로세스 ì´ë¦„ 다ìŒì— 괄호로 ê°ì‹¸ì„œ 나타냅니다."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid "Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with B<echo -e '\\033%@'>."
+msgstr "UTF-8 (유니코드) ì„  그리기 문ìžë¥¼ 사용합니다. 리눅스 1.1-54 ì´ìƒì˜ 버전ì—서는 콘솔ì—ì„œ B<echo -e '\\033%8'> 명령으로 UTF-8 ëª¨ë“œì— ì§„ìž…í•˜ê³  B<echo -e '\\033%@'> 명령으로 빠져나옵니다."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid "Show the current security attributes of the process. For SELinux systems this will be the security context."
+msgstr "í”„ë¡œì„¸ìŠ¤ì˜ í˜„ìž¬ 보안 ì†ì„±ì„ 나타냅니다. SELinux 시스템ì—ì„œ ì´ ì •ë³´ëŠ” 보안 컨í…스트가 ë˜ê² ìŠµë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "ì¼ë¶€ ë¬¸ìž ì§‘í•©ì€ VT100 문ìžë¥¼ 제대로 표시하지 못할 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
+
+#, no-wrap
+#~ msgid "2021-01-11"
+#~ msgstr "2021-01-11"
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
diff --git a/man-po/ko/fuser.1 b/man-po/ko/fuser.1
new file mode 100644
index 0000000..3e4e216
--- /dev/null
+++ b/man-po/ko/fuser.1
@@ -0,0 +1,185 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 2022\-11\-02 psmisc "ì‚¬ìš©ìž ëª…ë ¹"
+.SH ì´ë¦„
+fuser \- íŒŒì¼ ë˜ëŠ” ì†Œì¼“ì„ ì‚¬ìš©í•˜ëŠ” 프로세스를 ì‹ë³„합니다
+.SH 개요
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP
+\fI<ì˜ì—­>\fP] [\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fI<시그ë„>\fP] ]
+\fI<ì´ë¦„> \fP ...
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH 설명
+\fBfuser\fP 는 지정 íŒŒì¼ ë˜ëŠ” íŒŒì¼ ì‹œìŠ¤í…œì„ ì‚¬ìš©í•˜ëŠ” í”„ë¡œì„¸ìŠ¤ì˜ PID를 나타냅니다. 기본 표시 모드ì—ì„œ, ê° íŒŒì¼ ì´ë¦„ 다ìŒì—는
+ì ‘ê·¼ 형ì‹ì„ 나타내는 문ìžê°€ ë”°ë¼ì˜µë‹ˆë‹¤:
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+현재 디렉터리입니다.
+.TP
+\fBe\fP
+실행하고 있는 실행 파ì¼ìž…니다.
+.TP
+\fBf\fP
+파ì¼ì„ 엽니다. \fBf\fP 는 기본 표시 모드ì—ì„œ ìƒëžµí•©ë‹ˆë‹¤.
+.TP
+\fBF\fP
+ê¸°ë¡ ëª©ì ìœ¼ë¡œ 파ì¼ì„ 엽니다. \fBF\fP 는 기본 표시 모드ì—ì„œ ìƒëžµí•©ë‹ˆë‹¤.
+.TP
+\fBr\fP
+루트 디렉터리입니다.
+.TP
+\fBm\fP
+ë©”ëª¨ë¦¬ì— ë§¤í•‘í•œ íŒŒì¼ ë˜ëŠ” 공유 ë¼ì´ë¸ŒëŸ¬ë¦¬ìž…니다.
+.TP
+\&\fB.\fP
+ìž…ë ¥ ìžë¦¬ì´ë©°, 기본 표시 모드ì—ì„œ ìƒëžµí•©ë‹ˆë‹¤.
+.PD
+.RE
+.LP
+\fBfuser\fP 는 지정 파ì¼ì— 접근한 사용ìžê°€ 없거나 치명ì ì¸ 오류가 ìžˆì„ ê²½ìš°ì— 0ì´ ì•„ë‹Œ 코드 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤. ì ì–´ë„ 하나
+ì´ìƒì˜ ì ‘ê·¼ ì‚¬ìš©ìž ë˜ëŠ” 프로세스를 찾으면, \fBfuser\fPì—ì„œ 0ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤.
+.PP
+TCP와 UDP 소켓으로 프로세스를 찾아보려면, 해당 ì´ë¦„ ì˜ì—­ì„ \fB\-n\fP 옵션으로 ì„ íƒí•´ì•¼í•©ë‹ˆë‹¤. \fBfuser\fP는 기본ì ìœ¼ë¡œ
+IPv6와 IPv4 ì†Œì¼“ì„ ë‘˜ 다 찾아봅니다. 기본 ë™ìž‘ì„ ë°”ê¾¸ë ¤ë©´ \fB\-4\fP와 \fB\-6\fP ì˜µì…˜ì„ ì‚¬ìš©í•˜ì‹­ì‹œì˜¤. ì†Œì¼“ì€ ë¡œì»¬ ë˜ëŠ”
+ì›ê²© í¬íŠ¸, ì›ê²© 주소로 지정할 수 있습니다. 모든 필드는 옵션ì´ì§€ë§Œ, 빠진 입력란 ì•žì—는 반드시 쉼표를 넣어야 합니다:
+.PP
+[\fI<로컬_í¬íŠ¸>\fP][,[\fI<ì›ê²©_호스트>\fP][,[\fI<ì›ê²©_í¬íŠ¸>\fP]]]
+.PP
+기호 ë¬¸ìž ë˜ëŠ” ìˆ«ìž ê°’ì„ IP 주소와 í¬íŠ¸ 번호로 사용할 수 있습니다.
+.PP
+\fBfuser\fP 는 PIDë§Œì„ í‘œì¤€ 출력으로 ë‚´ë³´ë‚´ë©° 나머지는 표준 오류로 내보냅니다.
+.SH 옵션
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+ëª…ë ¹í–‰ì— ì§€ì •í•œ 모든 파ì¼ì„ 나타냅니다. 기본ì ìœ¼ë¡œ 최소한 하나 ì´ìƒì˜ 프로세스로 접근한 파ì¼ë§Œ 나타납니다.
+.TP
+\fB\-c\fP
+\fB\-m\fP 옵션과 ë™ì¼í•˜ë©°, POSIX 호환 목ì ìœ¼ë¡œ 사용합니다.
+.TP
+\fB\-f\fP
+조용히 무시하며, POSIX 호환 목ì ìœ¼ë¡œ 사용합니다.
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+파ì¼ì— 접근하는 프로세스를 강제로 ë•ë‹ˆë‹¤. \fB\-\fP\fI<시그ë„>\/\fPë¡œ 바꾸지 않으면 SIGKILL 시그ë„ì„ ë³´ëƒ…ë‹ˆë‹¤.
+\fBfuser\fP 프로세스 ìžì²´ëŠ” 강제로 ë내지 않습니다만, 다른 \fBfuser\fP 프로세스는 강제로 ë낼 수 있습니다. \fBfuser\fP를
+실행하는 í”„ë¡œì„¸ìŠ¤ì˜ í•´ë‹¹ ì‚¬ìš©ìž ID는 강제로 ë내기 ì „ì— ì‹¤ì œ ì‚¬ìš©ìž IDë¡œ 설정합니다.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+프로세스를 강제로 ë내기 ì „ì— ì‚¬ìš©ìžì—게 확ì¸í•©ë‹ˆë‹¤. ì´ ì˜µì…˜ì€ \fB\-k\fP ì˜µì…˜ì´ ì—†ì„ ë–„ë„ ì¡°ìš©ížˆ 무시합니다.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+ì´ë¦„ ì˜ì—­ì— 대해 \fB<파ì¼>\fPì„ ì§€ì •í•œ 파ì¼ì˜ ì•„ì´ë…¸ë“œì™€ ëª¨ë‘ ë¹„êµí•˜ë©°, ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œì˜ íŒŒì¼ ì´ë¦„ì— ëŒ€í•´ì„œëŠ”
+수행하지 않습니다.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+알려진 모든 ì‹œê·¸ë„ ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.
+.TP
+\fB\-m\fP\fI <ì´ë¦„>\fP, \fB\-\-mount \fP\fI<ì´ë¦„>\fP
+\fI<ì´ë¦„>\fP ì—는 마운트한 íŒŒì¼ ì‹œìŠ¤í…œì´ë‚˜ 마운트한 ë¸”ë¡ ìž¥ì¹˜ì— ìžˆëŠ” 파ì¼ì„ 지정합니다. 해당 íŒŒì¼ ì‹œìŠ¤í…œì˜ íŒŒì¼ì—
+접근하는 모든 프로세스를 나타냅니다. 디렉터리를 지정했다면, ìžë™ìœ¼ë¡œ \fI<ì´ë¦„>\fP/ 으로 바꾸어 해당 디렉터리ì—
+마운트한 íŒŒì¼ ì‹œìŠ¤í…œì„ í™œìš©í•©ë‹ˆë‹¤.
+.TP
+\fB\-M\fP, \fB\-\-ismountpoint\fP
+\fI<ì´ë¦„>\fP으로 마운트 지ì ì„ ì§€ì •í–ˆì„ ë•Œë§Œ ìš”ì²­ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤. \fI<ì´ë¦„>\fPì´ íŒŒì¼ ì‹œìŠ¤í…œì— ì—†ì„ë•Œ
+머신ì—ì„œ ì‚¬ìš©ìž ì—¬ëŸ¬ë¶„ì˜ ê°•ì œ í‡´ì¶œì„ ë§‰ëŠ” 귀중한 안전장치입니다.
+.TP
+\fB\-w\fP
+ê¸°ë¡ ì ‘ê·¼ì„ í•˜ê³  있는 프로세스만 강제로 ë냅니다. \fB\-k\fP ì˜µì…˜ì´ ì—†ì„ ë•Œë„ ì´ ì˜µì…˜ì€ ì¡°ìš©ížˆ 무시합니다.
+.TP
+\fB\-n\fP\fI <ì´ë¦„ì˜ì—­>\fP, \fB\-\-namespace \fP\fI<ì´ë¦„ì˜ì—­>\fP
+다른 ì´ë¦„ ì˜ì—­ì„ ì„ íƒí•©ë‹ˆë‹¤. \fBfile\fP(íŒŒì¼ ì´ë¦„, 기본), \fBudp\fP(로컬 UDP í¬íŠ¸), \fBtcp\fP(로컬 TCP í¬íŠ¸)
+ì´ë¦„ ì˜ì—­ì„ 지ì›í•©ë‹ˆë‹¤. í¬íŠ¸ì˜ 경우 í¬íŠ¸ 번호 ë˜ëŠ” 심볼 ì´ë¦„ 둘 다 지ì›í•©ë‹ˆë‹¤. 햇갈리지만 않는다면
+\fI<ì´ë¦„>\fP\fB/\fP\fI<ì˜ì—­>\fP (예: \fI80\fP\fB/\fP\fItcp\fP) 표기 ë°©ì‹ì„ 활용할 수 있습니다.
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+ë™ìž‘ ë‚´ìš© ì¶œë ¥ì„ í•˜ì§€ 않습니다. ì´ ëª¨ë“œì—ì„œ \fB\-u\fP, \fB\-v\fP ì˜µì…˜ì€ ë¬´ì‹œí•©ë‹ˆë‹¤. \fB\-a\fP ì˜µì…˜ì€ \fB\-s\fP 옵션과 함께
+사용하면 안ë©ë‹ˆë‹¤.
+.TP
+\fB\-\fP\fI<시그ë„>\fP
+프로세스를 강제로 ë낼 ë•Œ SIGKILL 대신 내보낼 지정 시그ë„ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. 시그ë„ì€ ì´ë¦„(예: \fB\-HUP\fP) ë˜ëŠ” 번호(예:
+\fB\-1\fP)ë¡œ 지정할 수 있습니다. ì´ ì˜µì…˜ì€ \fB\-k\fP ì˜µì…˜ì„ ì‚¬ìš©í•˜ì§€ 않으면 조용히 무시합니다.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+ê° PIDì— í”„ë¡œì„¸ìŠ¤ ì†Œìœ ìž ì‚¬ìš©ìž ì´ë¦„ì„ ë¶™ìž…ë‹ˆë‹¤.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+장황한 출력 모드. 프로세스를 \fBps\fP ë°©ì‹ìœ¼ë¡œ 나타냅니다. PID, 사용ìž, ëª…ë ¹ì„ \fBps\fP와 비슷하게 나타냅니다. ì ‘ê·¼ì—서는
+í”„ë¡œì„¸ìŠ¤ì˜ íŒŒì¼ ì ‘ê·¼ ë°©ì‹ì„ 나타냅니다. ì¼ë¶€ 파ì¼ì´ 마운트 지ì , knfs ìµìŠ¤í¬íŒ…, 스왑 파ì¼ë¡œ ì ‘ê·¼í–ˆì„ ê²½ìš°ì—ë„ ìž¥í™©í•œ 출력
+모드로 나타냅니다. ì´ ê²½ìš° \fBkernel\fPì´ PID 대신 나타납니다.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+버전 정보를 나타냅니다.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+IPv4 소켓만 검색합니다. ì´ ì˜µì…˜ì€ \fB\-6\fP 옵션과 사용하면 안ë˜ë©°, tcp ë° udp ì´ë¦„ ì˜ì—­ì—만 해당합니다.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+IPv6 소켓만 검색합니다. ì´ ì˜µì…˜ì€ \fB\-4\fP 옵션과 사용하면 안ë˜ë©°, tcp ë° udp ì´ë¦„ ì˜ì—­ì—만 해당합니다.
+.SH 파ì¼
+.TP
+/proc
+proc íŒŒì¼ ì‹œìŠ¤í…œì˜ ìœ„ì¹˜ìž…ë‹ˆë‹¤
+.SH 예제
+.TP
+\fBfuser \-km /home\fP
+ì–´ë–¤ 힉으로든 /home íŒŒì¼ ì‹œìŠ¤í…œì— ì ‘ê·¼í•˜ê³  있는 모든 프로세스를 강제로 ë냅니다.
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fI<명령>\fP\fB; fi\fP
+/dev/ttyS1ì„ í™œìš©í•˜ëŠ” 프로세스가 없다면 \f\fI명령\fP\fPì„ ì‹¤í–‰í•©ë‹ˆë‹¤.
+.TP
+\fBfuser telnet/tcp\fP
+(로컬) 텔넷 í¬íŠ¸ì˜ 모든 프로세스를 나타냅니다.
+.SH 제약사항
+ë™ì¼í•œ íŒŒì¼ ë˜ëŠ” íŒŒì¼ ì‹œìŠ¤í…œì— ë™ì¼í•œ ë°©ì‹ìœ¼ë¡œ 여러번 접근하는 프로세스는 한번만 나타냅니다.
+.PP
+ë™ì¼í•œ 개체를 ëª…ë ¹í–‰ì— ì—¬ëŸ¬ë²ˆ 지정하면, ì¼ë¶€ í•­ëª©ì€ ë¬´ì‹œí•©ë‹ˆë‹¤.
+.PP
+\fBfuser\fP는 권한 ì—†ì´ ì‹¤í–‰í•  경우 ì¼ë¶€ 정보를 가져오지 못할 수 있습니다. ì´ ê²°ê³¼ë¡œ, 다른 사용ìžê°€ 소유한 프로세스ì—ì„œ ì—°
+파ì¼ì€ 목ë¡ì— 나타나지 않으며, 매핑한 실행 파ì¼ë¡œ 분류한 요소만 나타납니다.
+.PP
+\fBfuser\fP는 ê¶Œí•œì´ ì—†ëŠ” íŒŒì¼ ì„œìˆ ìž í…Œì´ë¸”ì˜ í”„ë¡œì„¸ìŠ¤ 정보를 나타낼 수는 없습니다. ëŒ€ë¶€ë¶„ì˜ ê²½ìš° ì´ëŸ° 문제는 \fBfuser\fP를
+ì¼ë°˜ 사용ìžë¡œ 실행할 ë•Œ TCP ë˜ëŠ” UDP ì†Œì¼“ì„ ì°¾ì•„ë³¼ ë•Œ 나타납니다. ì´ ê²½ìš° \fBfuser\fPì—서는 ì ‘ê·¼ ê¶Œí•œì´ ì—†ë‹¤ê³ 
+알려ì¤ë‹ˆë‹¤.
+.PP
+\fBfuser\fP SUID 루트를 설치하면 ì¼ë¶€ 정보를 조회하는 관련 문제를 막아주긴 하지만, 보안 ë° ì‚¬ìƒí™œ 문제로 ì ì ˆí•˜ì§€ 못합니다.
+.PP
+\fBudp\fP 와 \fBtcp\fP ì´ë¦„ ì˜ì—­, 유닉스 ë„ë©”ì¸ ì†Œì¼“ì€ 1.3.78 버전 ì´ì „ 커ë„ì—서는 검색할 수 없습니다.
+.PP
+ì»¤ë„ ì ‘ê·¼ì€ \fB\-v\fP 옵션으로만 나타납니다.
+.PP
+\fB\-k\fP 옵션만 프로세스를 처리할 수 있습니다. 사용ìžê°€ 커ë„ì´ë¼ë©´, \fBfuser\fP ì—ì„œ ì§€ì¹¨ì„ ë‚˜íƒ€ë‚´ê¸´ 하지만 ê·¸ ì´ìƒì˜ ë™ìž‘ì€
+취하지 않습니다.
+.PP
+\fBfuser\fP는 다른 마운트 ì´ë¦„ ì˜ì—­ì—ì„œ 프로세스가 마운팅한 ë¸”ë¡ ìž¥ì¹˜ëŠ” 보여주지 않습니다. fuserê°€ ì•„ë‹Œ 프로세스 ì´ë¦„ ì˜ì—­ì˜
+프로세스 íŒŒì¼ ì„œìˆ ìž í…Œì´ë¸”ì— ìž¥ì¹˜ IDê°€ 나타나서 ê²°ê³¼ì ìœ¼ë¡œ ì¼ì¹˜í•˜ì§€ 않기 때문입니다.
+.SH 버그
+.PP
+\fBfuser \-m /dev/sgX\fP 명령 (ë˜ëŠ” \fB\-k\fP 플래그로 강제로 ë냄) ì€ í•´ë‹¹ 장치를 설정하지 ì•Šì•„ë„ ëª¨ë“  프로세스를
+ë³´ì—¬ì¤ë‹ˆë‹¤. ì´ëŸ° ë™ìž‘ì„ ì·¨í•˜ëŠ” 다른 장치가 ìžˆì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.
+.PP
+\fB\-m\fP 마운트 ì˜µì…˜ì€ ë™ì¼í•œ 장치ì—ì„œ 지정한 파ì¼ê³¼ ì¼ì¹˜í•˜ëŠ” ì–´ë–¤ 파ì¼ì´ë“  찾겠지만, 마운트 지ì ì„ 지정하기만 í•  경우 \fB\-M\fP
+ì˜µì…˜ì„ í™œìš©í•˜ì‹­ì‹œì˜¤.
+.PP
+\fBfuser\fP는 \fBstat\fP(2) ê³¼ \fI/proc/<PID>/maps\fPì˜ ìž¥ì¹˜ IDê°€ ë‹¬ë¼ \fBbtrfs\fP(5)
+íŒŒì¼ ì‹œìŠ¤í…œì—ì„œì˜ ê²½ìš° 프로세스 공유 ë¼ì´ë¸ŒëŸ¬ë¦¬ ê°™ì€ ë§¤í•‘ 파ì¼ì„ 찾아내지 못합니다.
+.SH "추가 참조"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/ko/killall.1 b/man-po/ko/killall.1
new file mode 100644
index 0000000..b2a1400
--- /dev/null
+++ b/man-po/ko/killall.1
@@ -0,0 +1,105 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH KILLALL 1 2023\-06\-17 psmisc "ì‚¬ìš©ìž ëª…ë ¹"
+.SH ì´ë¦„
+killall \- 지정한 ì´ë¦„ì˜ í”„ë¡œì„¸ìŠ¤ë¥¼ 강제로 ë냅니다
+.SH 개요
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fI<패턴>\fP] [\fB\-e\fP,\fB\ \-\-exact\fP]
+[\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP
+\fIPID\fP] [\fB\-o\fP,\fB\ \-\-older\-than\fP \fI<시간>\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP]
+[\fB\-r\fP,\fB\ \-\-regexp\fP] [\fB\-s\fP,\fB\ \-\-signal\fP \fI<시그ë„>\fP,\ \fB\-\fP\fI<시그ë„>\fP] [\fB\-u\fP,\fB\ \-\-user\fP \fI<사용ìž>\fP] [\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP] [\fB\-y\fP,\fB\ \-\-younger\-than\fP \fI<시간>\fP]
+[\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\fB\ \-\-version\fP] [\fB\-\-\fP] \fI<ì´ë¦„>\fP
+\&...
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH 설명
+\fBkillall\fPì€ ì§€ì • ëª…ë ¹ì— ì¼ì¹˜í•˜ëŠ” 모든 실행 í”„ë¡œì„¸ìŠ¤ì— ì‹œê·¸ë„ì„ ë³´ëƒ…ë‹ˆë‹¤. 지정한 ì‹œê·¸ë„ ì´ë¦„ì´ ì—†ë‹¤ë©´ SIGTERMì„
+보냅니다.
+.PP
+시그ë„ì€ ì´ë¦„(예: \fB\-HUP\fP ë˜ëŠ” \fB\-SIGHUP\fP), 번호(예: \fB\-i\fP), \fB\-s\fP 옵션으로 지정할 수 있습니다.
+.PP
+If the command name is not regular expression (option \fB\-r\fP) and contains a
+slash (\fB/\fP), processes executing that particular file will be selected for
+killing, independent of their name.
+.PP
+\fBkillall\fPì€ ê° ëª…ë ¹ì— ëŒ€í•´ 최소한 í•˜ë‚˜ì˜ í”„ë¡œì„¸ìŠ¤ë¥¼ 강제로 ëëƒˆì„ ê²½ìš°, ë˜ëŠ” \fB\-u\fP와 \fB\-Z\fP 검색 ì¡°ê±´ì— ì¼ì¹˜í•˜ëŠ”
+하나 ì´ìƒì˜ 프로세스가 있지만 ëª…ë ¹ì€ ë‚˜íƒ€ë‚˜ì§€ ì•Šì•˜ì„ ê²½ìš° 0 코드를 반환합니다. ì´ ê²½ìš°ê°€ 아니ë¼ë©´ \fBkillall\fPì€ 0ì´ ì•„ë‹Œ
+ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤.
+.PP
+A \fBkillall\fP 프로세스는 ìžì‹ ì„ 강제로 ë내지 않습니다(만 다른 \fBkillall\fP 프로세스를 강제로 ë낼 수 있습니다).
+.SH 옵션
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+아주 긴 ì´ë¦„ì— ì •í™•í•˜ê²Œ ì¼ì¹˜í•´ì•¼í•©ë‹ˆë‹¤. 명령 ì´ë¦„ì´ 15ìž ì´ìƒì´ë©´ ì „ì²´ ì´ë¦„ì„ ì‚¬ìš©í•  수 ì—†ì„ì§€ë„ ëª¨ë¦…ë‹ˆë‹¤(예: ìŠ¤ì™€í•‘í–ˆì„ ë–„).
+ì´ ê²½ìš°, \fBkillall\fPì€ ì²˜ìŒ 15ê¸€ìž ë‚´ì— ì¼ì¹˜í•˜ëŠ 모든 대ìƒì„ 강제로 ëë‚´ë©°, \fB\-e\fP ì˜µì…˜ì„ ì§€ì •í•˜ë©´ ì´ í•­ëª©ì€
+무시합니다. \fBkillall\fPì€ \fB\-v\fP 옵션과 \fB\-e\fP ì˜µì…˜ì„ í•¨ê»˜ 지정하면 무시한 ê° í•­ëª©ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+대소문ìžë¥¼ 구별하지 ì•Šê³  프로세스 ì´ë¦„ì„ ê²€ìƒ‰í•©ë‹ˆë‹¤.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+지정 í”„ë¡œì„¸ìŠ¤ì— ì†í•œ 프로세스 ê·¸ë£¹ì„ ê°•ì œë¡œ ë냅니다. ê°•ì œ 종료 시그ë„ì€ ë™ì¼í•œ 프로세스 ê·¸ë£¹ì— ì—¬ëŸ¬ 프로세스가 있다 하ë”ë¼ë„ 그룹당
+한번씩만 보냅니다.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+강제로 ë내기 ì „ 대화ì‹ìœ¼ë¡œ 확ì¸í•©ë‹ˆë‹¤.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+알려진 모든 ì‹œê·¸ë„ ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+주어진 PID ì˜ PID ì´ë¦„ ì˜ì—­ê³¼ ì¼ì¹˜í•˜ëŠ” í•­ëª©ì„ ì°¾ìŠµë‹ˆë‹¤. 기본 ë™ìž‘ì€ ëª¨ë“  ì´ë¦„ ì˜ì—­ì— ì¼ì¹˜í•˜ëŠ” í•­ëª©ì˜ ê²€ìƒ‰ìž…ë‹ˆë‹¤.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+지정한 시간보다 ì˜¤ëž˜ëœ (ì´ì „ì˜) 프로세스만 검색합니다. ì‹œê°„ì€ ì†Œìˆ«ì  ìˆ«ìž ë‹¤ìŒ ë‹¨ìœ„ë¥¼ 붙여 지정합니다. 지정 단위는
+s,m,h,d,w,M,yì´ë©°, ê°ê° ì´ˆ,분,시간,ì¼,주,ì›”,ë…„ì„ ì˜ë¯¸í•©ë‹ˆë‹¤.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+강제로 ë낸 프로세스가 ì—†ë”ë¼ë„ ì–´ë–¤ ë©”ì‹œì§€ë„ ì¶œë ¥í•˜ì§€ 않습니다.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+프로세스 ì´ë¦„ íŒ¨í„´ì„ \fBregex\fP(3)ì— ë”°ë¥¸ POSIX 확장 ì •ê·œ 표현ì‹ìœ¼ë¡œ í•´ì„합니다.
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fI<시그ë„>\fP"
+SIGTERM 대신 지정 시그ë„ì„ ë³´ëƒ…ë‹ˆë‹¤.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+지정 사용ìžê°€ 소유한 프로세스만 강제로 ë냅니다. 명령 ì´ë¦„ì€ ì˜µì…˜ìž…ë‹ˆë‹¤.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+시그ë„ì„ ì œëŒ€ë¡œ ë³´ëƒˆì„ ê²½ìš° 알려ì¤ë‹ˆë‹¤.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+버전 정보를 나타냅니다.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+모든 프로세스를 ë낼 때까지 기다립니다. \fBkillall\fP ì—서는 강제로 ë낼 프로세스가 있는지 초단위로 확ì¸í•˜ë©° 남아있는 프로세스가
+없어지면 종료 코드를 반환합니다. 참고로 \fBkillall\fPì€ ì‹œê·¸ë„ì„ ë¬´ì‹œí–ˆì„ ê²½ìš°, 명령 결과가 나오지 않거나, 프로세스가 좀비
+ìƒíƒœë¡œ 남아있다면 ê³„ì† ê¸°ë‹¤ë¦´ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+지정한 시간보다 ìµœê·¼ì˜ (ì´í›„ì˜) 프로세스만 검색합니다. ì‹œê°„ì€ ì†Œìˆ«ì  ìˆ«ìž ë‹¤ìŒ ë‹¨ìœ„ë¥¼ 붙여 지정합니다. 지정 단위는
+s,m,h,d,w,M,yì´ë©°, ê°ê° ì´ˆ,분,시간,ì¼,주,ì›”,ë…„ì„ ì˜ë¯¸í•©ë‹ˆë‹¤.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+보안 컨í…스트를 지정합니다. 지정한 확장 ì •ê·œ í‘œí˜„ì‹ íŒ¨í„´ì— ì¼ì¹˜í•˜ëŠ” 보안 컨í…ìŠ¤íŠ¸ì˜ í”„ë¡œì„¸ìŠ¤ë§Œ 강제로 ë냅니다. 명령행ì—ì„œ 다른
+ì¸ìžë³´ë‹¤ ì•žì„œ 지정해야합니다. 명령 ì´ë¦„ì€ ì˜µì…˜ìž…ë‹ˆë‹¤.
+.SH 파ì¼
+.TP
+/proc
+proc íŒŒì¼ ì‹œìŠ¤í…œì˜ ìœ„ì¹˜ìž…ë‹ˆë‹¤
+.SH "알려진 버그"
+íŒŒì¼ ì´ë¦„으로 강제로 ë내는 ë™ìž‘ì€ í•´ë‹¹ 파ì¼ì„ ì—´ê³  있는 실행 파ì¼ì´ 파ì¼ì„ ì—´ê³  있는 ë™ì•ˆì—만 ë™ìž‘합니다. 예를 들면, ì´ ë°©ì‹ìœ¼ë¡œëŠ”
+ìž ê¹ ì‹¤í–‰í–ˆë‹¤ê°€ ë나는 실행 파ì¼ì„ 강제로 ë낼 수 없습니다.
+.PP
+\fBkillall\fPì„ ìž…ë ¥í•  ë•Œ \fI<ì´ë¦„<\fPì€ íŠ¹ížˆ ê¶Œí•œì„ ê°€ì§„ 사용ìžì— ì˜í•´ 리눅스 ì‹œìŠ¤í…œì´ ì•„ë‹Œ ê³³ì—ì„œ 예ìƒì¹˜ 못한
+ë™ìž‘ì„ í•  수 있습니다.
+.PP
+\fBkillall \-w\fP ëª…ë ¹ì€ í”„ë¡œì„¸ìŠ¤ê°€ 사ë¼ì ¸ì„œ ë™ì¼í•œ PID를 가진 새 프로세스로 ë°”ë€Œì—ˆì„ ê²½ìš° 해당 프로세스를 찾아내지 못합니다.
+.PP
+프로세스가 ì´ë¦„ì„ ë°”ê¾¸ì—ˆë‹¤ë©´, \fBkillall\fPì—ì„œ 해당 프로세스를 정확하게 찾아낼 수 없습니다.
+.PP
+\fBkillall\fPì€ ëª…ë ¹í–‰ì—ì„œ 지정할 수 있는 ì´ë¦„ì— ì œí•œì´ ìžˆìŠµë‹ˆë‹¤. ì´ êµ¬í˜„ì²´ëŠ” 8배수 비부호 거대 ì •ìˆ˜í˜•ì˜ ìµœëŒ€ í¬ê¸°ë§Œí¼ì—
+해당합니다. 32비트 시스템ì—ì„œ 한계는 32ì´ë©°, 64비트 시스템ì—서는 64입니다.
+.SH "추가 참조"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBregex\fP(3).
diff --git a/man-po/ko/peekfd.1 b/man-po/ko/peekfd.1
new file mode 100644
index 0000000..758c09a
--- /dev/null
+++ b/man-po/ko/peekfd.1
@@ -0,0 +1,55 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 2021\-12\-01 psmisc "ì‚¬ìš©ìž ëª…ë ¹"
+.SH ì´ë¦„
+peekfd \- 실행 ì¤‘ì¸ í”„ë¡œì„¸ìŠ¤ì˜ íŒŒì¼ ì„œìˆ ìžë¥¼ 살펴봅니다
+.SH 개요
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-c\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIpid\fP [\fIfd\fP] [\fIfd\fP] ...
+.SH 설명
+\fBpeekfd\fPì—서는 실행 ì¤‘ì¸ í”„ë¡œì„¸ìŠ¤ì— ì ‘ê·¼í•˜ì—¬ íŒŒì¼ ì„œìˆ ìžë¡œ ì½ê³  쓰는 모든 요소를 관찰합니다. ì›í•˜ëŠ” íŒŒì¼ ì„œìˆ ìž ë²ˆí˜¸ë¥¼
+지정하거나 모든 해당 요소를 ë¤í•‘í•  수 있습니다.
+.SH 옵션
+.IP \-8
+ë°”ì´íŠ¸ ì½ê¸° 쓰기 후 처리를 진행하지 않습니다.
+.IP \-n
+ë¤í•‘ ë°”ì´íŠ¸ ì›ë³¸ì„ ì˜ë¯¸í•˜ëŠ” í—¤ë”를 나타내지 않습니다.
+.IP \-c
+새로 만든 새 하위 í”„ë¡œì„¸ìŠ¤ì— ëŒ€í•´ 요청 ë°›ì€ íŒŒì¼ ì„œìˆ ìž í™œë™ë„ ë¤í•‘합니다.
+.IP \-d
+출력 ë‚´ìš©ì˜ ì¤‘ë³µ ì½ê¸°/쓰기를 제거합니다. tty를 echoë¡œ 찾아보고 있다면, ì•„ë§ˆë„ ì´ ì˜µì…˜ì„ ì›í•  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.
+.IP \-v
+버전 문ìžì—´ì„ 나타냅니다.
+.IP \-h
+ë„ì›€ë§ ë©”ì‹œì§€ë¥¼ 나타냅니다.
+.SH 파ì¼
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+사용하진 않지만 ì ì ˆí•œ íŒŒì¼ ì„œìˆ ìž ë²ˆí˜¸ë¥¼ 찾는 사용ìžì—ê² ìš”ê¸´í•  수 있습니다.
+.SH 환경
+ë‚´ìš© ì—†ìŒ.
+.SH 진단
+ë‹¤ìŒ ì§„ë‹¨ 결과는 표준 오류로 출력합니다:
+.TP
+\fBPID \fP\fI<PID>\fP\fBë²ˆì— ë¶™ì´ëŠ” 중 오류\fP
+í”„ë¡œì„¸ìŠ¤ì— ì ‘ê·¼ì„ ì‹œë„í•  ë•Œ ì•Œ 수 없는 오류가 나타나는ë°, ì´ ê²½ìš° 루트 ê³„ì •ì´ í•„ìš”í•©ë‹ˆë‹¤.
+.SH 버그
+ì•„ë§ˆë„ ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì¼ì§€ë„ 모릅니다. 관찰 ì¤‘ì¸ í”„ë¡œì„¸ìŠ¤ê°€ 죽는다 하ë”ë¼ë„ 놀ë¼ì§€ 마십시오.
+.SH ì €ìž
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "추가 참조"
+\fBttysnoop\fP(8)
diff --git a/man-po/ko/prtstat.1 b/man-po/ko/prtstat.1
new file mode 100644
index 0000000..6f445a7
--- /dev/null
+++ b/man-po/ko/prtstat.1
@@ -0,0 +1,35 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 2020\-09\-09 psmisc "ì‚¬ìš©ìž ëª…ë ¹"
+.SH ì´ë¦„
+prtstat \- 프로세스 통계를 나타냅니다
+.SH 개요
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH 설명
+\fBprtstat\fPì€ ì§€ì • í”„ë¡œì„¸ìŠ¤ì˜ í†µê³„ë¥¼ 나타냅니다. ì´ ì •ë³´ëŠ” \fB/proc/\fP\fIpid\fP\fB/stat\fP 파ì¼ì—ì„œ 가져옵니다.
+.SH 옵션
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+ì›ì‹œ 형ì‹ìœ¼ë¡œ 정보를 나타냅니다.
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+\fBprtstat\fPì˜ ë²„ì „ 정보를 나타냅니다.
+.SH 파ì¼
+.TP
+\fB/proc/\fP\fIpid\fP\fB/stat\fP
+\fBprtstat\fPì´ ì‚¬ìš©í•˜ëŠ” ì •ë³´ì˜ ì¶œì²˜ë¥¼ 지정합니다.
diff --git a/man-po/ko/pslog.1 b/man-po/ko/pslog.1
new file mode 100644
index 0000000..3544bc2
--- /dev/null
+++ b/man-po/ko/pslog.1
@@ -0,0 +1,40 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 2020\-09\-09 리눅스\(dq "리눅스 ì‚¬ìš©ìž ì„¤ëª…ì„œ"
+.SH ì´ë¦„
+pslog \- í”„ë¡œì„¸ìŠ¤ì˜ í˜„ìž¬ 로그 경로를 나타냅니다
+.SH 개요
+.ad l
+\fBpslog\fP \fIpid\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH 설명
+\fBpslog\fP ëª…ë ¹ì€ í”„ë¡œì„¸ìŠ¤ 현재 ë™ìž‘ 로그를 나타냅니다.
+.SH 옵션
+.TP
+\fB\-V\fP
+버전 정보를 나타냅니다.
+.SH "추가 참조"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH ì €ìž
+Vito Mule\(cq
+.MT mulevito@gmail.com
+.ME
+ê°€ 2015ë…„ì— \fBpslog\fP를
+작성했습니다.
+.MT mulevito@gmail.com
+.ME
+ì—게 버그를 알려주십시오
+
diff --git a/man-po/ko/pstree.1 b/man-po/ko/pstree.1
new file mode 100644
index 0000000..d66b228
--- /dev/null
+++ b/man-po/ko/pstree.1
@@ -0,0 +1,119 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 2021\-06\-21 psmisc "ì‚¬ìš©ìž ëª…ë ¹"
+.SH ì´ë¦„
+pstree \- 프로세스 트리를 나타냅니다
+.SH 개요
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIattr\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fI\ pid\fP,\fB\ \-\-highlight\-pid\ \fP\fIpid\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fIns\fP] [\fB\-p\fP,\fB\ \-\-show\-pids\fP]
+[\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP] [\fB\-u\fP,\fB\ \-\-uid\-changes\fP]
+[\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIPID\fP,\fB\ \fP\fI<사용ìž>\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH 설명
+\fBpstree\fP 는 실행 프로세스를 트리 형ì‹ìœ¼ë¡œ 나타냅니다. \fIpid\fP ê°’ì„ ìƒëžµí•˜ë©´ \fIpid\fP ë˜ëŠ” \fBinit\fP를 뿌리로
+둡니다. ì‚¬ìš©ìž ì´ë¦„ì„ ì§€ì •í•˜ë©´, 해당 사용ìžë¥¼ 루트로 하여 해당 사용가 소유한 프로세스를 나타냅니다.
+.PP
+\fBpstree\fP 는 ì´ìƒì ì¸ 브랜치를 ê° ê´„í˜¸ ë‚´ë¡œ ì‹œê°ì ìœ¼ë¡œ 병합하고, ê·¸ ì•žì— ë°˜ë³µ 횟수를 붙여 나타냅니다. 예를 들면,
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+를 다ìŒì²˜ëŸ¼ 나타냅니다
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+í”„ë¡œì„¸ìŠ¤ì˜ í•˜ìœ„ 스레드는 ìƒìœ„ 프로세스 아래서 ì°¾ì„ ìˆ˜ 있으며, 중괄호로 ê°ì‹¼ 프로세스 ì´ë¦„으로 나타냅니다. 예를 들면,
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+\fBpstree\fP를 \fBpstree.x11\fPë¡œ 호출하면, í–‰ 마지막ì—ì„œ 사용ìžì—게 리턴 키를 누르ë„ë¡ ìš”ì²­í•˜ë©°, 키를 누르지 않으면 ì–´ë–¤
+ë™ìž‘ë„ ì·¨í•˜ì§€ 않습니다. \fBpstree\fP를 xterminalì—ì„œ 실행할 경우 ì´ ì˜µì…˜ì´ ìš”ê¸´í•©ë‹ˆë‹¤.
+.PP
+procfsì˜ \fIhidepid\fP 옵션 ê°™ì€ ì»¤ë„ ë˜ëŠ” 마운트 ì¸ìž 종류는 ì¼ë¶€ í”„ë¡œì„¸ìŠ¤ì˜ ì •ë³´ë¥¼ 숨ê¹ë‹ˆë‹¤. ì´ ê²½ìš° \fBpstree\fP는
+ì´ ì •ë³´ ì—†ì´ íŠ¸ë¦¬ë¥¼ 구성하여 해당 프로세스 ì´ë¦„ì€ ë¬¼ìŒí‘œë¡œ 나타냅니다.
+
+.SH 옵션
+.IP \fB\-a\fP
+명령행 ì¸ìžë¥¼ 나타냅니다. í”„ë¡œì„¸ìŠ¤ì˜ ëª…ë ¹í–‰ì„ ìŠ¤ì™€í•‘í–ˆë‹¤ë©´, 해당 프로세스를 괄호로 ê°ì‹¸ì„œ 나타냅니다. \fB\-a\fP ì˜µì…˜ì€ ì•”ë¬µì ìœ¼ë¡œ
+스레드 ë¿ë§Œ ì•„ë‹ˆë¼ í”„ë¡œì„¸ìŠ¤ì˜ ê°„ì†Œí™”ë¥¼ 막아ì¤ë‹ˆë‹¤.
+.IP \fB\-A\fP
+트리를 그려 나타낼 ë–„ 아스키 문ìžë¥¼ 사용합니다.
+.IP \fB\-c\fP
+ì´ìƒì ì¸ 하위 íŠ¸ë¦¬ì˜ ê°„ì†Œí™”ë¥¼ 진행하지 않습니다. 기본ì ìœ¼ë¡œ 하위 트리는 가능하면 간소화합니다.
+.IP \fB\-C\fP
+주어진 ì†ì„±ì˜ 프로세스 ì´ë¦„ì„ ìƒ‰ìœ¼ë¡œ 구별합니다. 현재 \fBpstree\fP는 프로세스 실행 경과 시간으로 ìƒ‰ìƒ êµ¬ë³„í•˜ëŠ” \fBage\fP ì†ì„±ë§Œ
+받아들입니다. 60ì´ˆ ì´ë‚´ë¡œ 실행한 프로세스는 녹색으로, 한시간 ì´ë‚´ë¡œ 실행한 프로세스는 황색으로, 나머지는 ì ìƒ‰ìœ¼ë¡œ 나타냅니다.
+.IP \fB\-g\fP
+PGID를 나타냅니다. 프로세스 그룹 ID는 ê° í”„ë¡œì„¸ìŠ¤ ì´ë¦„ 다ìŒì— 괄호로 ê°ì‹¼ 10진수로 나타냅니다. PID와 PGID를 둘 다
+나타낸다면 PID가 먼저 나타납니다.
+.IP \fB\-G\fP
+VT100 ì„  그리기 문ìžë¥¼ 사용합니다.
+.IP \fB\-h\fP
+현재 프로세스와 ìƒìœ„ 프로세스를 강조합니다. í„°ë¯¸ë„ ê°•ì¡° ê¸°ëŠ¥ì´ ë™ìž‘하지 않거나 현재 프로세스 ë˜ëŠ” ìƒìœ„ 프로세스가 나타나지 않으면 ì´
+ì˜µì…˜ì€ ë™ìž‘하지 않습니다.
+.IP \fB\-H\fP
+\fB\-h\fP 옵션과 유사하지만, 대신 지정 프로세스를 강조합니다. \fB\-h\fP 옵션과는 달리, \fBpstree\fP ëª…ë ¹ì€ ê°•ì¡° 기능ì´
+ë™ìž‘하지 ì•Šì„ ë•Œ \fB\-H\fP ì˜µì…˜ì„ ì‚¬ìš©í•˜ë©´ ë™ìž‘ì— ì‹¤íŒ¨í•©ë‹ˆë‹¤.
+.IP \fB\-l\fP
+길게 í–‰ì„ í‘œì‹œí•©ë‹ˆë‹¤. 기본ì ìœ¼ë¡œ COLUMNS 환경 변수 ë˜ëŠ” 화면 표시 í­ì— ë”°ë¼ í–‰ì„ ìžë¦…니다. ë‘가지 ì–´ë–¤ ë°©ì‹ìœ¼ë¡œë“  ë™ìž‘하지
+않는다면 132 ì»¬ëŸ¼ì„ ê¸°ë³¸ê°’ìœ¼ë¡œ 활용합니다.
+.IP \fB\-n\fP
+ì´ë¦„ 대신 PIDë¡œ ë™ì¼í•œ ìƒìœ„ 프로세스를 정렬합니다. (ìˆ«ìž í¬ê¸°ìˆœ ì •ë ¬.)
+.IP \fB\-N\fP
+지정 형ì‹ì˜ ê° ì´ë¦„ ì˜ì—­ì— 대한 ê° íŠ¸ë¦¬ë¥¼ 나타냅니다. 가용 형ì‹ìœ¼ë¡œ \fIipc\fP, \fImnt\fP, \fInet\fP, \fIpid\fP,
+\fItime\fP, \fIuser\fP, \fIuts\fPê°€ 있습니다. ì¼ë°˜ 사용ìžëŠ” 다른 사용ìžì˜ 프로세스 정보를 ë³¼ 수 없기 때문ì—, 출력 ë‚´ìš©ì„
+제한합니다.
+.IP \fB\-p\fP
+여러 PID를 나타냅니다. PID는 ê° í”„ë¡œì„¸ìŠ¤ ì´ë¦„ 다ìŒì— 괄호로 ë‘˜ëŸ¬ì‹¸ì¸ 10진 숫ìžë¡œ 나타냅니다. \fB\-p\fP 옵션으로는
+암묵ì ìœ¼ë¡œ 간소화 ë™ìž‘ì„ ë§‰ì•„ì¤ë‹ˆë‹¤.
+.IP \fB\-s\fP
+지정 í”„ë¡œì„¸ìŠ¤ì˜ ìƒìœ„ 프로세스를 나타냅니다.
+.IP \fB\-S\fP
+ì´ë¦„ì˜ì—­ ë³€í™˜ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. \fB\-N\fP 옵션과 유사하게, ì¼ë°˜ 사용ìžë¡œ 실행하는 경우 출력 ë‚´ìš©ì„ ì œí•œí•©ë‹ˆë‹¤.
+.IP \fB\-t\fP
+스레드가 있다면 ì „ì²´ ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.
+.IP \fB\-T\fP
+스레드는 숨기고 프로세스만 나타냅니다.
+.IP \fB\-u\fP
+UID ë³€í™˜ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ìƒìœ„ í”„ë¡œì„¸ìŠ¤ì˜ UID와 프로세스 UIDê°€ 달ë¼ì§€ëŠ” 언제든지, 새 UID를 해당 프로세스 ì´ë¦„ 다ìŒì— 괄호로
+ê°ì‹¸ì„œ 나타냅니다.
+.IP \fB\-U\fP
+UTF\-8 (유니코드) ì„  그리기 문ìžë¥¼ 사용합니다. 리눅스 1.1\-54 ì´ìƒì˜ 버전ì—서는 콘솔ì—ì„œ \fBecho \-e '\033%8'\fP
+명령으로 UTF\-8 ëª¨ë“œì— ì§„ìž…í•˜ê³  \fBecho \-e '\033%@'\fP 명령으로 빠져나옵니다.
+.IP \fB\-V\fP
+버전 정보를 나타냅니다.
+.IP \fB\-Z\fP
+í”„ë¡œì„¸ìŠ¤ì˜ í˜„ìž¬ 보안 ì†ì„±ì„ 나타냅니다. SELinux 시스템ì—ì„œ ì´ ì •ë³´ëŠ” 보안 컨í…스트가 ë˜ê² ìŠµë‹ˆë‹¤.
+.SH 파ì¼
+.TP
+/proc
+proc íŒŒì¼ ì‹œìŠ¤í…œì˜ ìœ„ì¹˜ìž…ë‹ˆë‹¤
+.SH 버그
+ì¼ë¶€ ë¬¸ìž ì§‘í•©ì€ VT100 문ìžë¥¼ 제대로 표시하지 못할 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.
+.SH "추가 참조"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/man-po/man.stamp b/man-po/man.stamp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/man-po/man.stamp
diff --git a/man-po/po4a.cfg b/man-po/po4a.cfg
new file mode 100644
index 0000000..f9d27db
--- /dev/null
+++ b/man-po/po4a.cfg
@@ -0,0 +1,25 @@
+[po4a_langs] da de fr hr ko pt_BR ro ru sr sv uk
+[po4a_paths] psmisc.pot $lang:$lang.po
+
+# Make sure the man pages are generated with the right encoding.
+#[po4a_alias:man] man \
+# opt_de:"-L ISO-8859-1 -A utf-8" \
+
+[type:man] ../doc/fuser.1 $lang:$lang/fuser.1 \
+ add_$lang:?po/$lang.add
+
+[type:man] ../doc/killall.1 $lang:$lang/killall.1 \
+ add_$lang:?po/$lang.add
+
+[type:man] ../doc/peekfd.1 $lang:$lang/peekfd.1 \
+ add_$lang:?po/$lang.add
+
+[type:man] ../doc/pslog.1 $lang:$lang/pslog.1 \
+ add_$lang:?po/$lang.add
+
+[type:man] ../doc/prtstat.1 $lang:$lang/prtstat.1 \
+ add_$lang:?po/$lang.add
+
+[type:man] ../doc/pstree.1 $lang:$lang/pstree.1 \
+ add_$lang:?po/$lang.add
+
diff --git a/man-po/psmisc.pot b/man-po/psmisc.pot
new file mode 100644
index 0000000..18be5b7
--- /dev/null
+++ b/man-po/psmisc.pot
@@ -0,0 +1,1566 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.6.15-473e1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr ""
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr ""
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr ""
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid ""
+"B<fuser> displays the PIDs of processes using the specified files or file "
+"systems. In the default display mode, each file name is followed by a "
+"letter denoting the type of access:"
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid ""
+"B<fuser> returns a non-zero return code if none of the specified files is "
+"accessed or in case of a fatal error. If at least one access has been "
+"found, B<fuser> returns zero."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid ""
+"In order to look up processes using TCP and UDP sockets, the corresponding "
+"name space has to be selected with the B<-n> option. By default B<fuser> "
+"will look in both IPv6 and IPv4 sockets. To change the default behavior, "
+"use the B<-4> and B<-6> options. The socket(s) can be specified by the "
+"local and remote port, and the remote address. All fields are optional, but "
+"commas in front of missing fields must be present:"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid ""
+"Either symbolic or numeric values can be used for IP addresses and port "
+"numbers."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid "B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid ""
+"Show all files specified on the command line. By default, only files that "
+"are accessed by at least one process are shown."
+msgstr ""
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid ""
+"Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, "
+"SIGKILL is sent. An B<fuser> process never kills itself, but may kill other "
+"B<fuser> processes. The effective user ID of the process executing B<fuser> "
+"is set to its real user ID before attempting to kill."
+msgstr ""
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid ""
+"Ask the user for confirmation before killing a process. This option is "
+"silently ignored if B<-k> is not present too."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid ""
+"For the name space B<file> let all comparisons be based on the inodes of the "
+"specified file(s) and never on the file names even on network based file "
+"systems."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid ""
+"I<NAME> specifies a file on a mounted file system or a block device that is "
+"mounted. All processes accessing files on that file system are listed. If "
+"a directory is specified, it is automatically changed to I<NAME>/ to use any "
+"file system that might be mounted on that directory."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid ""
+"Request will be fulfilled only if I<NAME> specifies a mountpoint. This is "
+"an invaluable seat belt which prevents you from killing the machine if "
+"I<NAME> happens to not be a filesystem."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid ""
+"Kill only processes which have write access. This option is silently "
+"ignored if B<-k> is not present too."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid ""
+"Select a different name space. The name spaces B<file> (file names, the "
+"default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are "
+"supported. For ports, either the port number or the symbolic name can be "
+"specified. If there is no ambiguity, the shortcut notation "
+"I<name>B</>I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid ""
+"Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not "
+"be used with B<-s>."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid ""
+"Use the specified signal instead of SIGKILL when killing processes. Signals "
+"can be specified either by name (e.g., B<-HUP>) or by number (e.g., "
+"B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr ""
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr ""
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid ""
+"Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, "
+"USER and COMMAND are similar to B<ps>. ACCESS shows how the process "
+"accesses the file. Verbose mode will also show when a particular file is "
+"being accessed as a mount point, knfs export or swap file. In this case "
+"B<kernel> is shown instead of the PID."
+msgstr ""
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid ""
+"Search only for IPv4 sockets. This option must not be used with the B<-6> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid ""
+"Search only for IPv6 sockets. This option must not be used with the B<-4> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr ""
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid ""
+"Processes accessing the same file or file system several times in the same "
+"way are only shown once."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid ""
+"If the same object is specified several times on the command line, some of "
+"those entries may be ignored."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid ""
+"B<fuser> may only be able to gather partial information unless run with "
+"privileges. As a consequence, files opened by processes belonging to other "
+"users may not be listed and executables may be classified as mapped only."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid ""
+"B<fuser> cannot report on any processes that it doesn't have permission to "
+"look at the file descriptor table for. The most common time this problem "
+"occurs is when looking for TCP or UDP sockets when running B<fuser> as a "
+"non-root user. In this case B<fuser> will report no access."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid ""
+"Installing B<fuser> SUID root will avoid problems associated with partial "
+"information, but may be undesirable for security and privacy reasons."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid ""
+"B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched "
+"with kernels older than 1.3.78."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid ""
+"The B<-k> option only works on processes. If the user is the kernel, "
+"B<fuser> will print an advice, but take no action beyond that."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid ""
+"B<fuser> will not see block devices mounted by processes in a different "
+"mount namespace. This is due to the device ID shown in the process' file "
+"descriptor table being from the process namespace, not fuser's; meaning it "
+"won't match."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid ""
+"B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, "
+"even if you don't have that device configured. There may be other devices "
+"it does this for too."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid ""
+"The mount B<-m> option will match any file within the same device as the "
+"specified file, use the B<-M> option as well if you mean to specify only the "
+"mount point."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid ""
+"B<fuser> will not match mapped files, such as a process' shared libraries if "
+"they are on a B<btrfs>(5) filesystem due to the device IDs being different "
+"for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+msgid ""
+"B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), "
+"B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr ""
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr ""
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "2023-06-17"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid ""
+"B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] "
+"[B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> "
+"I<PID>] [B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ "
+"--regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ "
+"--user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ "
+"--younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<name> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:41
+msgid "B<killall> B<-l>, B<--list>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid ""
+"B<killall> sends a signal to all processes running any of the specified "
+"commands. If no signal name is specified, SIGTERM is sent."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:58
+msgid ""
+"Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or "
+"by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid ""
+"If the command name is not regular expression (option B<-r>) and contains a "
+"slash (B</>), processes executing that particular file will be selected for "
+"killing, independent of their name."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid ""
+"B<killall> returns a zero return code if at least one process has been "
+"killed for each listed command, or no commands were listed and at least one "
+"process matched the B<-u> and B<-Z> search criteria. B<killall> returns "
+"non-zero otherwise."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid ""
+"A B<killall> process never kills itself (but may kill other B<killall> "
+"processes)."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid ""
+"Require an exact match for very long names. If a command name is longer "
+"than 15 characters, the full name may be unavailable (i.e. it is swapped "
+"out). In this case, B<killall> will kill everything that matches within the "
+"first 15 characters. With B<-e>, such entries are skipped. B<killall> "
+"prints a message for each skipped entry if B<-v> is specified in addition to "
+"B<-e>."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid ""
+"Kill the process group to which the process belongs. The kill signal is "
+"only sent once per group, even if multiple processes belonging to the same "
+"process group were found."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid ""
+"Match against the PID namespace of the given PID. The default is to match "
+"against all namespaces."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid ""
+"Match only processes that are older (started before) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid ""
+"Interpret process name pattern as a POSIX extended regular expression, per "
+"B<regex>(3)."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid "Kill only processes the specified user owns. Command names are optional."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid ""
+"Wait for all killed processes to die. B<killall> checks once per second if "
+"any of the killed processes still exist and only returns if none are left. "
+"Note that B<killall> may wait forever if the signal was ignored, had no "
+"effect, or if the process stays in zombie state."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid ""
+"Match only processes that are younger (started after) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr ""
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid ""
+"Specify security context: kill only processes having security context that "
+"match with given extended regular expression pattern. Must precede other "
+"arguments on the command line. Command names are optional."
+msgstr ""
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid ""
+"Killing by file only works for executables that are kept open during "
+"execution, i.e. impure executables can't be killed this way."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid ""
+"Be warned that typing B<killall> I<name> may not have the desired effect on "
+"non-Linux systems, especially when done by a privileged user."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid ""
+"B<killall -w> doesn't detect if a process disappears and is replaced by a "
+"new process with the same PID between scans."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid ""
+"If processes change their name, B<killall> may not be able to match them "
+"correctly."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid ""
+"B<killall> has a limit of names that can be specified on the command line. "
+"This figure is the size of an unsigned long integer multiplied by 8. For "
+"most 32 bit systems the limit is 32 and similarly for a 64 bit system the "
+"limit is usually 64."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+msgstr ""
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr ""
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] "
+"[B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] "
+"[B<-h>,B<--help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid ""
+"B<peekfd> attaches to a running process and intercepts all reads and writes "
+"to file descriptors. You can specify the desired file descriptor numbers or "
+"dump all of them."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid ""
+"Also dump the requested file descriptor activity in any new child processes "
+"that are created."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid ""
+"Remove duplicate read/writes from the output. If you're looking at a tty "
+"with echo, you might want this."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr ""
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid ""
+"Not used but useful for the user to look at to get good file descriptor "
+"numbers."
+msgstr ""
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr ""
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr ""
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid ""
+"An unknown error occurred while attempted to attach to a process, you may "
+"need to be root."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid "Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr ""
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr ""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr ""
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr ""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr ""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr ""
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in "
+"2015. Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr ""
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid ""
+"B<prtstat> prints the statistics of the specified process. This information "
+"comes from the B</proc/>I<pid>B</stat> file."
+msgstr ""
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr ""
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr ""
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr ""
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr ""
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ "
+"--highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] "
+"[B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ "
+">I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ "
+"--ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] "
+"[B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ "
+"--ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ "
+">I<user>]"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid ""
+"B<pstree> shows running processes as a tree. The tree is rooted at either "
+"I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all "
+"process trees rooted at processes owned by that user are shown."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid ""
+"B<pstree> visually merges identical branches by putting them in square "
+"brackets and prefixing them with the repetition count, e.g."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid ""
+"Child threads of a process are found under the parent process and are shown "
+"with the process name in curly braces, e.g."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid ""
+"If B<pstree> is called as B<pstree.x11> then it will prompt the user at the "
+"end of the line to press return and will not return until that has "
+"happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid ""
+"Certain kernel or mount parameters, such as the I<hidepid> option for "
+"procfs, will hide information for some processes. In these situations "
+"B<pstree> will attempt to build the tree without this information, showing "
+"process names as question marks."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid ""
+"Show command line arguments. If the command line of a process is swapped "
+"out, that process is shown in parentheses. B<-a> implicitly disables "
+"compaction for processes but not threads."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid ""
+"Disable compaction of identical subtrees. By default, subtrees are "
+"compacted whenever possible."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid ""
+"Color the process name by given attribute. Currently B<pstree> only accepts "
+"the value B<age> which colors by process age. Processes newer than 60 "
+"seconds are green, newer than an hour yellow and the remaining red."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid ""
+"Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses "
+"after each process name. If both PIDs and PGIDs are displayed then PIDs are "
+"shown first."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid ""
+"Highlight the current process and its ancestors. This is a no-op if the "
+"terminal doesn't support highlighting or if neither the current process nor "
+"any of its ancestors are in the subtree being shown."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid ""
+"Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, "
+"B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid ""
+"Display long lines. By default, lines are truncated to either the COLUMNS "
+"environment variable or the display width. If neither of these methods "
+"work, the default of 132 columns is used."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid ""
+"Sort processes with the same parent by PID instead of by name. (Numeric "
+"sort.)"
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid ""
+"Show individual trees for each namespace of the type specified. The "
+"available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, "
+"I<uts>. Regular users don't have access to other users' processes "
+"information, so the output will be limited."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid ""
+"Show PIDs. PIDs are shown as decimal numbers in parentheses after each "
+"process name. B<-p> implicitly disables compaction."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid ""
+"Show namespaces transitions. Like B<-N>, the output is limited when running "
+"as a regular user."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid ""
+"Show uid transitions. Whenever the uid of a process differs from the uid of "
+"its parent, the new uid is shown in parentheses after the process name."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid ""
+"Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, "
+"UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with "
+"B<echo -e '\\033%@'>."
+msgstr ""
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid ""
+"Show the current security attributes of the process. For SELinux systems "
+"this will be the security context."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr ""
diff --git a/man-po/pt_BR.po b/man-po/pt_BR.po
new file mode 100644
index 0000000..59f93c3
--- /dev/null
+++ b/man-po/pt_BR.po
@@ -0,0 +1,1920 @@
+# Portuguese translations for psmisc package
+# Traduções em português brasileiro para o pacote psmisc
+# Copyright (C) 2021 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Rafael Fontenelle <rafaelff@gnome.org>, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.4rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2021-02-03 21:05-0300\n"
+"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
+"net>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"X-Generator: Gtranslator 3.38.0\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr ""
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "Comandos de usuário"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser - identifica processos usando arquivos ou soquetes"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "SINOPSE"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+#, fuzzy
+#| msgid ""
+#| "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> "
+#| "I<space>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> "
+#| "\\&...\""
+msgid ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<espaço>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SINAL>] ] I<nome> \\&..."
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "DESCRIÇÃO"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid ""
+"B<fuser> displays the PIDs of processes using the specified files or file "
+"systems. In the default display mode, each file name is followed by a "
+"letter denoting the type of access:"
+msgstr ""
+"B<fuser> exibe os PIDs de processos usando os arquivos ou sistemas de "
+"arquivos especificados. No modo de exibição padrão, cada nome de arquivo é "
+"seguido por uma letra que indica o tipo de acesso:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "diretório atual."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "executável que está em execução."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "abre um arquivo. B<f> é omitido no modo de exibição padrão."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr "abre arquivo para escrita. B<F> é omitido no modo de exibição padrão."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "diretório raiz."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "biblioteca compartilhada ou arquivo que foram mapeados com mmap."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr "Espaço reservado, omitido no modo de exibição padrão."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid ""
+"B<fuser> returns a non-zero return code if none of the specified files is "
+"accessed or in case of a fatal error. If at least one access has been "
+"found, B<fuser> returns zero."
+msgstr ""
+"B<fuser> retorna um código de retorno diferente de zero se nenhum dos "
+"arquivos especificados for acessado ou no caso de um erro fatal. Se pelo "
+"menos um acesso for encontrado, B<fuser> retorna zero."
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid ""
+"In order to look up processes using TCP and UDP sockets, the corresponding "
+"name space has to be selected with the B<-n> option. By default B<fuser> "
+"will look in both IPv6 and IPv4 sockets. To change the default behavior, "
+"use the B<-4> and B<-6> options. The socket(s) can be specified by the "
+"local and remote port, and the remote address. All fields are optional, but "
+"commas in front of missing fields must be present:"
+msgstr ""
+"Para pesquisar processos usando soquetes TCP e UDP, o espaço de nomes "
+"correspondente deve ser selecionado com a opção B<-n>. Por padrão, B<fuser> "
+"procurará nos soquetes IPv6 e IPv4. Para alterar o comportamento padrão, use "
+"as opções B<-4> e B<-6>. Os soquetes podem ser especificados pela porta "
+"local e remota e pelo endereço remoto. Todos os campos são opcionais, mas as "
+"vírgulas na frente dos campos ausentes devem estar presentes:"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<porta_lcl>][,[I<host_rmt>][,[I<porta_rmt>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid ""
+"Either symbolic or numeric values can be used for IP addresses and port "
+"numbers."
+msgstr ""
+"Valores simbólicos ou numéricos podem ser usados para endereços IP e números "
+"de porta."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid ""
+"B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr ""
+"B<fuser> emite apenas os PIDs para stdout, todo o resto é enviado para "
+"stderr."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "OPÇÕES"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid ""
+"Show all files specified on the command line. By default, only files that "
+"are accessed by at least one process are shown."
+msgstr ""
+"Mostra todos os arquivos especificados na linha de comando. Por padrão, "
+"apenas os arquivos acessados por pelo menos um processo são mostrados."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "Igual à opção B<-m>, usada para compatibilidade POSIX."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "Ignorado silenciosamente, usado para compatibilidade POSIX."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid ""
+"Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, "
+"SIGKILL is sent. An B<fuser> process never kills itself, but may kill other "
+"B<fuser> processes. The effective user ID of the process executing B<fuser> "
+"is set to its real user ID before attempting to kill."
+msgstr ""
+"Mata os processos que acessam o arquivo. A menos que seja alterado com B<-"
+">I<SIGNAL\\/>, SIGKILL é enviado. Um processo B<fuser> nunca mata a si "
+"próprio, mas pode matar outros processos B<fuser>. O ID de usuário efetivo "
+"do processo que executa B<fuser> é definido com seu ID de usuário real antes "
+"de tentar matar."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid ""
+"Ask the user for confirmation before killing a process. This option is "
+"silently ignored if B<-k> is not present too."
+msgstr ""
+"Peça confirmação ao usuário antes de encerrar um processo. Esta opção é "
+"silenciosamente ignorada se B<-k> também não estiver presente."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid ""
+"For the name space B<file> let all comparisons be based on the inodes of the "
+"specified file(s) and never on the file names even on network based file "
+"systems."
+msgstr ""
+"Para o espaço de nomes de B<file>, deixa todas as comparações serem baseadas "
+"nos inodes do(s) arquivo(s) especificado(s) e nunca nos nomes dos arquivos, "
+"mesmo em sistemas de arquivos baseados em rede."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "Lista todos os nomes de sinal conhecidos."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, fuzzy, no-wrap
+#| msgid "B<-m>I< NAME >, B<--mount >I<NAME>"
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< NOME>, B<--mount >I<NOME>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+#, fuzzy
+#| msgid ""
+#| "I<NAME> specifies a file on a mounted file system or a block device that "
+#| "is mounted. All processes accessing files on that file system are "
+#| "listed. If a directory is specified, it is automatically changed to "
+#| "I<NAME>/. to use any file system that might be mounted on that directory."
+msgid ""
+"I<NAME> specifies a file on a mounted file system or a block device that is "
+"mounted. All processes accessing files on that file system are listed. If "
+"a directory is specified, it is automatically changed to I<NAME>/ to use any "
+"file system that might be mounted on that directory."
+msgstr ""
+"I<NAME> especifica um arquivo em um sistema de arquivos montado ou um "
+"dispositivo de bloco que está montado. Todos os processos que acessam "
+"arquivos nesse sistema de arquivos são listados. Se um diretório for "
+"especificado, ele será alterado automaticamente para I<NOME>/. para usar "
+"qualquer sistema de arquivos que possa ser montado nesse diretório."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid ""
+"Request will be fulfilled only if I<NAME> specifies a mountpoint. This is "
+"an invaluable seat belt which prevents you from killing the machine if "
+"I<NAME> happens to not be a filesystem."
+msgstr ""
+"A solicitação será atendida apenas se I<NOME> especificar um ponto de "
+"montagem. Este é um cinto de segurança inestimável que o impede de matar a "
+"máquina se I<NOME> não for um sistema de arquivos."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid ""
+"Kill only processes which have write access. This option is silently "
+"ignored if B<-k> is not present too."
+msgstr ""
+"Mata apenas os processos que têm acesso de escrita. Esta opção é "
+"silenciosamente ignorada se B<-k> também não estiver presente."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< ESPAÇO\\ DE\\ NOMES>, B<--namespace >I<ESPAÇO\\ DE\\ NOMES>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid ""
+"Select a different name space. The name spaces B<file> (file names, the "
+"default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are "
+"supported. For ports, either the port number or the symbolic name can be "
+"specified. If there is no ambiguity, the shortcut notation I<name>B</"
+">I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr ""
+"Seleciona um espaço de nome diferente. Os espaços de nomes B<file> (nomes de "
+"arquivo, o padrão), B<udp> (portas UDP locais) e B<tcp> (portas TCP locais) "
+"são suportados. Para portas, o número da porta ou o nome simbólico podem ser "
+"especificados. Se não houver ambiguidade, a notação de atalho I<nome>B</"
+">I<espaço> (por exemplo, I<80>B</>I<tcp>) pode ser usada."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid ""
+"Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not "
+"be used with B<-s>."
+msgstr ""
+"Operação silenciosa. B<-u> e B<-v> são ignorados neste modo. B<-a> não deve "
+"ser usado com B<-s>."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<SINAL>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid ""
+"Use the specified signal instead of SIGKILL when killing processes. Signals "
+"can be specified either by name (e.g., B<-HUP>) or by number (e.g., "
+"B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr ""
+"Usa o sinal especificado em vez de SIGKILL ao matar processos. Os sinais "
+"podem ser especificados por nome (por exemplo, B<-HUP>) ou por número (por "
+"exemplo, B<-1>). Esta opção é silenciosamente ignorada se a opção B<-k> não "
+"for usada."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "Anexa o nome de usuário do proprietário do processo a cada PID."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid ""
+"Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, "
+"USER and COMMAND are similar to B<ps>. ACCESS shows how the process "
+"accesses the file. Verbose mode will also show when a particular file is "
+"being accessed as a mount point, knfs export or swap file. In this case "
+"B<kernel> is shown instead of the PID."
+msgstr ""
+"Modo detalhado. Os processos são mostrados no estilo B<ps>. Os campos PID, "
+"USER e COMMAND são semelhantes a B<ps>. ACCESS mostra como o processo acessa "
+"o arquivo. O modo detalhado também mostrará quando um arquivo específico "
+"está sendo acessado como um ponto de montagem, exportação de knfs ou arquivo "
+"de troca. Neste caso, B<kernel> é mostrado em vez do PID."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "Exibe informação da versão."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid ""
+"Search only for IPv4 sockets. This option must not be used with the B<-6> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"Pesquisa apenas soquetes IPv4. Esta opção não deve ser usada com a opção "
+"B<-6> e só tem efeito com os espaços de nomes tcp e udp."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid ""
+"Search only for IPv6 sockets. This option must not be used with the B<-4> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"Pesquisa apenas soquetes IPv6. Esta opção não deve ser usada com a opção "
+"B<-4> e só tem efeito com os espaços de nomes tcp e udp."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "ARQUIVOS"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "local do sistema de arquivos proc"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "EXEMPLOS"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr ""
+"mata todos os processos que acessam o sistema de arquivos /home de qualquer "
+"forma."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<comando>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "invoca I<comando> se nenhum outro processo estiver usando /dev/ttyS1."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "mostra todos os processos na porta TELNET (local)."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "RESTRIÇÕES"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid ""
+"Processes accessing the same file or file system several times in the same "
+"way are only shown once."
+msgstr ""
+"Os processos que acessam o mesmo arquivo ou sistema de arquivos várias vezes "
+"da mesma maneira são mostrados apenas uma vez."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid ""
+"If the same object is specified several times on the command line, some of "
+"those entries may be ignored."
+msgstr ""
+"Se o mesmo objeto for especificado várias vezes na linha de comando, algumas "
+"dessas entradas podem ser ignoradas."
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid ""
+"B<fuser> may only be able to gather partial information unless run with "
+"privileges. As a consequence, files opened by processes belonging to other "
+"users may not be listed and executables may be classified as mapped only."
+msgstr ""
+"B<fuser> só pode ser capaz de coletar informações parciais, a menos que seja "
+"executado com privilégios. Como consequência, os arquivos abertos por "
+"processos pertencentes a outros usuários podem não ser listados e os "
+"executáveis podem ser classificados apenas como mapeados."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid ""
+"B<fuser> cannot report on any processes that it doesn't have permission to "
+"look at the file descriptor table for. The most common time this problem "
+"occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-"
+"root user. In this case B<fuser> will report no access."
+msgstr ""
+"B<fuser> não pode relatar sobre nenhum processo para o qual não tenha "
+"permissão para consultar a tabela do descritor de arquivo. O momento mais "
+"comum em que esse problema ocorre é ao procurar soquetes TCP ou UDP ao "
+"executar B<fuser> como um usuário não root. Neste caso, B<fuser> relatará "
+"nenhum acesso."
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid ""
+"Installing B<fuser> SUID root will avoid problems associated with partial "
+"information, but may be undesirable for security and privacy reasons."
+msgstr ""
+"Instalar o B<fuser> com root SUID evitará problemas associados a informações "
+"parciais, mas pode ser indesejável por razões de segurança e privacidade."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid ""
+"B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched "
+"with kernels older than 1.3.78."
+msgstr ""
+"Os espaços de nomes B<udp> e B<tcp> e soquetes de domínio UNIX não podem ser "
+"pesquisados com kernels anteriores a 1.3.78."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "Os acessos pelo kernel são mostrados apenas com a opção B<-v>."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid ""
+"The B<-k> option only works on processes. If the user is the kernel, "
+"B<fuser> will print an advice, but take no action beyond that."
+msgstr ""
+"A opção B<-k> funciona apenas em processos. Se o usuário for o kernel, "
+"B<fuser> imprimirá um conselho, mas não fará nada além disso."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid ""
+"B<fuser> will not see block devices mounted by processes in a different "
+"mount namespace. This is due to the device ID shown in the process' file "
+"descriptor table being from the process namespace, not fuser's; meaning it "
+"won't match."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "BUGS"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid ""
+"B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, "
+"even if you don't have that device configured. There may be other devices "
+"it does this for too."
+msgstr ""
+"B<fuser -m /dev/sgX> vai mostrar (ou matar com o sinalizador B<-k>) todos os "
+"processos, mesmo se você não tiver aquele dispositivo configurado. Pode "
+"haver outros dispositivos para os quais ele também faz isso."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid ""
+"The mount B<-m> option will match any file within the same device as the "
+"specified file, use the B<-M> option as well if you mean to specify only the "
+"mount point."
+msgstr ""
+"A opção de montagem B<-m> vai corresponder a qualquer arquivo dentro do "
+"mesmo dispositivo que o arquivo especificado, use a opção B<-M> também se "
+"você pretende especificar apenas o ponto de montagem."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid ""
+"B<fuser> will not match mapped files, such as a process' shared libraries if "
+"they are on a B<btrfs>(5) filesystem due to the device IDs being different "
+"for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "VEJA TAMBÉM"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+#, fuzzy
+#| msgid ""
+#| "B<kill>(1), B<killall>(1), B<lsof>(8), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgid ""
+"B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), "
+"B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr ""
+"B<kill>(1), B<killall>(1), B<lsof>(8), B<pkill>(1), B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "2023-06-17"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall - mata processos por nome"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+#, fuzzy
+#| msgid ""
+#| "B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-"
+#| "g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> "
+#| "I<PID>] [B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,"
+#| "B<\\ --regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ I<-SIGNAL>] [B<-u>,"
+#| "B<\\ --user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,"
+#| "B<\\ --younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V,>\\ --"
+#| "versionB<]> [B<-->] I<name ...>"
+msgid ""
+"B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --"
+"user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<name> ..."
+msgstr ""
+"B<killall> [B<-Z>,B<\\ --context> I<padrão>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TEMPO>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SINAL>,\\ I<-SINAL>] [B<-u>,B<\\ --user> "
+"I<usuário>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<TEMPO>] [B<-I>,B<\\ --ignore-case>] [B<-V,>\\ --versionB<]> "
+"[B<-->] I<nome ...>"
+
+#. type: Plain text
+#: ../doc/killall.1:41
+#, fuzzy
+#| msgid "B<-l>, B<--list>"
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+#, fuzzy
+#| msgid "B<killall> -V,B<\\ --version>"
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> -V,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid ""
+"B<killall> sends a signal to all processes running any of the specified "
+"commands. If no signal name is specified, SIGTERM is sent."
+msgstr ""
+"B<killall> envia um sinal para todos os processos que executam qualquer um "
+"dos comandos especificados. Se nenhum nome de sinal for especificado, "
+"SIGTERM será enviado."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+#, fuzzy
+#| msgid ""
+#| "Signals can be specified either by name (e.g. B<-HUP> or B<-SIGHUP>) or "
+#| "by number (e.g. B<-1>) or by option B<-s>."
+msgid ""
+"Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or "
+"by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr ""
+"Os sinais podem ser especificados pelo nome (por exemplo, B<-HUP> ou B<-"
+"SIGHUP>) ou por número (por exemplo, B<-1>) ou pela opção B<-s>."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid ""
+"If the command name is not regular expression (option B<-r>) and contains a "
+"slash (B</>), processes executing that particular file will be selected for "
+"killing, independent of their name."
+msgstr ""
+"Se o nome do comando não for uma expressão regular (opção B<-r>) e contiver "
+"uma barra (B</>), os processos que executam aquele arquivo específico serão "
+"selecionados para eliminação, independente de seu nome."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid ""
+"B<killall> returns a zero return code if at least one process has been "
+"killed for each listed command, or no commands were listed and at least one "
+"process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-"
+"zero otherwise."
+msgstr ""
+"B<killall> retorna um código de retorno zero se pelo menos um processo foi "
+"eliminado para cada comando listado, ou nenhum comando foi listado e pelo "
+"menos um processo correspondeu aos critérios de pesquisa B<-u> e B<-Z>. "
+"B<killall> retorna diferente de zero, caso contrário."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid ""
+"A B<killall> process never kills itself (but may kill other B<killall> "
+"processes)."
+msgstr ""
+"Um processo B<killall> nunca se mata (mas pode matar outros processos "
+"B<killall>)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid ""
+"Require an exact match for very long names. If a command name is longer "
+"than 15 characters, the full name may be unavailable (i.e. it is swapped "
+"out). In this case, B<killall> will kill everything that matches within the "
+"first 15 characters. With B<-e>, such entries are skipped. B<killall> "
+"prints a message for each skipped entry if B<-v> is specified in addition to "
+"B<-e>."
+msgstr ""
+"Requer uma correspondência exata para nomes muito longos. Se um nome de "
+"comando tiver mais de 15 caracteres, o nome completo pode não estar "
+"disponível (ou seja, foi trocado). Nesse caso, B<killall> matará tudo o que "
+"corresponder aos primeiros 15 caracteres. Com B<-e>, essas entradas são "
+"ignoradas. B<killall> imprime uma mensagem para cada entrada ignorada se B<-"
+"v> for especificado além de B<-e>."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr ""
+"Faz correspondência de nomes de processo sem diferenciar maiusculização de "
+"minúsculo."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid ""
+"Kill the process group to which the process belongs. The kill signal is "
+"only sent once per group, even if multiple processes belonging to the same "
+"process group were found."
+msgstr ""
+"Mata o grupo de processos ao qual o processo pertence. O sinal de eliminação "
+"é enviado apenas uma vez por grupo, mesmo se vários processos pertencentes "
+"ao mesmo grupo de processos forem encontrados."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "Pede confirmação interativamente antes de matar."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid ""
+"Match against the PID namespace of the given PID. The default is to match "
+"against all namespaces."
+msgstr ""
+"Compara com o espaço de nomes do PID ao PID fornecido. O padrão é "
+"corresponder a todos os espaço de nomes."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid ""
+"Match only processes that are older (started before) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr ""
+"Corresponde apenas aos processos que são mais antigos (iniciados antes) da "
+"hora especificada. O tempo é especificado como um flutuante e depois como "
+"uma unidade. As unidades são s,m,h,d,w,M,y para segundos, minutos, horas, "
+"dias, semanas, meses e anos, respectivamente."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "Não reclama se nenhum processo tiver sido eliminado."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid ""
+"Interpret process name pattern as a POSIX extended regular expression, per "
+"B<regex>(3)."
+msgstr ""
+"Interpreta o padrão do nome do processo como uma expressão regular estendida "
+"POSIX, por B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, fuzzy, no-wrap
+#| msgid "B<-s>, B<--signal>, B<-SIGNAL>"
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<-SINAL>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "Envia este sinal ao invés de SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid ""
+"Kill only processes the specified user owns. Command names are optional."
+msgstr ""
+"Mata apenas os processos que o usuário especificado possui. Os nomes dos "
+"comandos são opcionais."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "Relata se o sinal foi enviado com sucesso."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid ""
+"Wait for all killed processes to die. B<killall> checks once per second if "
+"any of the killed processes still exist and only returns if none are left. "
+"Note that B<killall> may wait forever if the signal was ignored, had no "
+"effect, or if the process stays in zombie state."
+msgstr ""
+"Aguarda todos os processos eliminados morrerem. B<killall> verifica uma vez "
+"a cada segundo se algum dos processos eliminados ainda existe e só retorna "
+"se nenhum sobrar. Observe que B<killall> pode esperar para sempre se o sinal "
+"for ignorado, não tiver efeito ou se o processo permanecer no estado zumbi."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid ""
+"Match only processes that are younger (started after) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr ""
+"Corresponde apenas aos processos que são mais recentes (iniciados após) o "
+"tempo especificado. O tempo é especificado como um flutuante e depois como "
+"uma unidade. As unidades são s,m,h,d,w,M,y para segundos, minutos, horas, "
+"dias, semanas, meses e anos, respectivamente."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+#, fuzzy
+#| msgid ""
+#| "(SELinux Only) Specify security context: kill only processes having "
+#| "security context that match with given extended regular expression "
+#| "pattern. Must precede other arguments on the command line. Command "
+#| "names are optional."
+msgid ""
+"Specify security context: kill only processes having security context that "
+"match with given extended regular expression pattern. Must precede other "
+"arguments on the command line. Command names are optional."
+msgstr ""
+"(Somente SELinux) Especifica o contexto de segurança: mata apenas os "
+"processos com contexto de segurança que corresponda ao padrão de expressão "
+"regular estendida fornecido. Deve preceder outros argumentos na linha de "
+"comando. Os nomes dos comandos são opcionais."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "BUGS CONHECIDOS"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid ""
+"Killing by file only works for executables that are kept open during "
+"execution, i.e. impure executables can't be killed this way."
+msgstr ""
+"Matar por arquivo só funciona para executáveis que são mantidos abertos "
+"durante a execução, ou seja, executáveis impuros não podem ser matados dessa "
+"maneira."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid ""
+"Be warned that typing B<killall> I<name> may not have the desired effect on "
+"non-Linux systems, especially when done by a privileged user."
+msgstr ""
+"Esteja avisado que digitar B<killall> I<nome> pode não ter o efeito desejado "
+"em sistemas não Linux, especialmente quando feito por um usuário "
+"privilegiado."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid ""
+"B<killall -w> doesn't detect if a process disappears and is replaced by a "
+"new process with the same PID between scans."
+msgstr ""
+"B<killall -w> não detecta se um processo desaparece e é substituído por um "
+"novo processo com o mesmo PID entre as varreduras."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid ""
+"If processes change their name, B<killall> may not be able to match them "
+"correctly."
+msgstr ""
+"Se os processos mudarem de nome, B<killall> pode não ser capaz de "
+"correspondê-los corretamente."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid ""
+"B<killall> has a limit of names that can be specified on the command line. "
+"This figure is the size of an unsigned long integer multiplied by 8. For "
+"most 32 bit systems the limit is 32 and similarly for a 64 bit system the "
+"limit is usually 64."
+msgstr ""
+"B<killall> tem um limite de nomes que podem ser especificados na linha de "
+"comando. Este número é o tamanho de um inteiro longo sem sinal multiplicado "
+"por 8. Para a maioria dos sistemas de 32 bits, o limite é 32 e, da mesma "
+"forma, para um sistema de 64 bits, o limite é geralmente 64."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+msgstr ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr ""
+"peekfd - dá uma olhada nos descritores de arquivo dos processos em execução"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+#, fuzzy
+#| msgid ""
+#| "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-f>,B<--"
+#| "follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+#| "help>] I<pid> [I<fd>] [I<fd>] B<...>"
+msgid ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-f>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] B<...>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid ""
+"B<peekfd> attaches to a running process and intercepts all reads and writes "
+"to file descriptors. You can specify the desired file descriptor numbers or "
+"dump all of them."
+msgstr ""
+"B<peekfd> anexa a um processo em execução e intercepta todas as leituras e "
+"escritas nos descritores de arquivo. Você pode especificar os números do "
+"descritor de arquivo desejados ou despejar todos eles."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr "Não faz pós-processamento nos bytes que estão sendo lidos ou escritos."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr "Não exibe cabeçalhos indicando a origem dos bytes despejados."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid ""
+"Also dump the requested file descriptor activity in any new child processes "
+"that are created."
+msgstr ""
+"Também despeja a atividade do descritor de arquivo solicitada em quaisquer "
+"novos processos filhos criados."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid ""
+"Remove duplicate read/writes from the output. If you're looking at a tty "
+"with echo, you might want this."
+msgstr ""
+"Remove leituras/escritas duplicadas da saída. Se você está olhando para um "
+"tty com eco, você pode querer isso."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "Exibe uma string de versão."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "Mostra a mensagem de ajuda."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+#, fuzzy
+#| msgid "I</proc/*/fd>"
+msgid "B</proc/>I<*>B</fd>"
+msgstr "I</proc/*/fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid ""
+"Not used but useful for the user to look at to get good file descriptor "
+"numbers."
+msgstr ""
+"Não é usado, mas é útil para o usuário olhar para obter bons números do "
+"descritor de arquivo."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "AMBIENTE"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "Nenhum."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "DIAGNÓSTICOS"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr ""
+"Os seguintes diagnósticos podem ser emitidos na stderr (saída de erro):"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, fuzzy, no-wrap
+#| msgid "B<Error attaching to pid E<lt>PIDE<gt>>"
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Erro ao anexar ao pid E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid ""
+"An unknown error occurred while attempted to attach to a process, you may "
+"need to be root."
+msgstr ""
+"Ocorreu um erro desconhecido ao tentar anexar a um processo; pode ser "
+"necessário ser root."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid ""
+"Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr ""
+"Provavelmente muitos. Não se surpreenda se o processo que você está "
+"monitorando morrer."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "AUTOR"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "9 de setembro de 2020"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "Linux\""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "Manual do Usuário do Linux"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+#, fuzzy
+#| msgid "pslog- report current logs path of a process"
+msgid "pslog - report current logs path of a process"
+msgstr "pslog - relata o caminho dos registros atuais de um processo"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<pid> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr "O comando B<pslog> relata os logs de trabalho atuais de um processo."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+#, fuzzy
+#| msgid ""
+#| "Vito Mule’ E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. "
+#| "Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgid ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. "
+"Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr ""
+"Vito Mule’ E<.MT mulevito@gmail.com> E<.ME> escreveu B<pslog> em 2015. Envie "
+"relatórios de erros para E<.MT mulevito@gmail.com> E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat - exibe informações sobre um processo"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+#, fuzzy
+#| msgid "B<prtstat> -VB<|>--version"
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> -VB<|>--version"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+#, fuzzy
+#| msgid ""
+#| "B<prtstat> prints the statistics of the specified process. This "
+#| "information comes from the I</proc/PID/stat> file."
+msgid ""
+"B<prtstat> prints the statistics of the specified process. This information "
+"comes from the B</proc/>I<pid>B</stat> file."
+msgstr ""
+"B<prtstat> exibe as estatísticas do processo especificado. Essas informações "
+"vêm do arquivo I</proc/PID/stat>."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "Exibe informações no formato bruto (não tratado)."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "Exibe as informações de versão para B<prtstat>."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, fuzzy, no-wrap
+#| msgid "/proc/E<lt>PIDE<gt>/stat"
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "/proc/E<lt>PIDE<gt>/stat"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "fonte das informações que o B<prtstat> usa."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree - exibe uma árvore de processos"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+#, fuzzy
+#| msgid ""
+#| "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,"
+#| "B<\\ --color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --"
+#| "highlight-all>,B<\\ -H>I<pid>B<,>\\ --highlight-pid\\ I<pid>B<]> [B<-l>,"
+#| "B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ "
+#| ">I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,"
+#| "B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-"
+#| "threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] "
+#| "[B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] "
+#| "[I<pid>,B<\\ >I<user>B<]>"
+msgid ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-"
+"n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<atributo>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-"
+"all>,B<\\ -H>I<pid>B<,>\\ --highlight-pid\\ I<pid>B<]> [B<-l>,B<\\ --long>] "
+"[B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --"
+"show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,"
+"B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-"
+"changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,"
+"B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<usuário>B<]>"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+#, fuzzy
+#| msgid "B<pstree> -VB<,>\\ --version"
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> -VB<,>\\ --version"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid ""
+"B<pstree> shows running processes as a tree. The tree is rooted at either "
+"I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all "
+"process trees rooted at processes owned by that user are shown."
+msgstr ""
+"B<pstree> mostra os processos em execução como uma árvore. A árvore está "
+"enraizada em I<pid> ou B<init> se I<pid> for omitido. Se um nome de usuário "
+"for especificado, todas as árvores de processo enraizadas em processos "
+"pertencentes a esse usuário serão mostradas."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid ""
+"B<pstree> visually merges identical branches by putting them in square "
+"brackets and prefixing them with the repetition count, e.g."
+msgstr ""
+"B<pstree> mescla visualmente ramos idênticos colocando-os entre colchetes e "
+"prefixando-os com a contagem de repetição. Por exemplo:"
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "se torna"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid ""
+"Child threads of a process are found under the parent process and are shown "
+"with the process name in curly braces, e.g."
+msgstr ""
+"Threads filhos de um processo são encontrados sob o processo pai e são "
+"mostrados com o nome do processo entre chaves. Por exemplo:"
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid ""
+"If B<pstree> is called as B<pstree.x11> then it will prompt the user at the "
+"end of the line to press return and will not return until that has "
+"happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr ""
+"Se B<pstree> for chamado como B<pstree.x11>, ele solicitará que o usuário no "
+"final da linha pressione Enter e não retornará até que isso aconteça. Isso é "
+"útil quando B<pstree> é executado em um xterminal."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid ""
+"Certain kernel or mount parameters, such as the I<hidepid> option for "
+"procfs, will hide information for some processes. In these situations "
+"B<pstree> will attempt to build the tree without this information, showing "
+"process names as question marks."
+msgstr ""
+"Certos parâmetros do kernel ou de montagem, como a opção I<hidepid> para "
+"procfs, irão ocultar informações para alguns processos. Nessas situações, "
+"B<pstree> tentará construir a árvore sem essas informações, mostrando os "
+"nomes dos processos como pontos de interrogação."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid ""
+"Show command line arguments. If the command line of a process is swapped "
+"out, that process is shown in parentheses. B<-a> implicitly disables "
+"compaction for processes but not threads."
+msgstr ""
+"Mostra os argumentos da linha de comando. Se a linha de comando de um "
+"processo for trocada, esse processo será mostrado entre parênteses. B<-a> "
+"desativa implicitamente a compactação para processos, mas não para threads."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "Usa caracteres ASCII para desenhar a árvore."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid ""
+"Disable compaction of identical subtrees. By default, subtrees are "
+"compacted whenever possible."
+msgstr ""
+"Desativa a compactação de subárvores idênticas. Por padrão, as subárvores "
+"são compactadas sempre que possível."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+#, fuzzy
+#| msgid ""
+#| "Color the process name by given attribute. Currently B<pstree> only "
+#| "accepts I<age> which colors by process age. Processes newer than 60 "
+#| "seconds are green, newer than an hour yellow and the remaining red."
+msgid ""
+"Color the process name by given attribute. Currently B<pstree> only accepts "
+"the value B<age> which colors by process age. Processes newer than 60 "
+"seconds are green, newer than an hour yellow and the remaining red."
+msgstr ""
+"Colore o nome do processo por determinado atributo. Atualmente, B<pstree> "
+"aceita apenas I<age> que colore por idade de processo. Processos com mais de "
+"60 segundos são verdes, mais recentes que uma hora são amarelos e o restante "
+"vermelho."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+#, fuzzy
+#| msgid ""
+#| "Show PGIDs. Process Group IDs are shown as decimal numbers in "
+#| "parentheses after each process name. B<-g> implicitly disables "
+#| "compaction. If both PIDs and PGIDs are displayed then PIDs are shown "
+#| "first."
+msgid ""
+"Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses "
+"after each process name. If both PIDs and PGIDs are displayed then PIDs are "
+"shown first."
+msgstr ""
+"Mostra PGIDs. Os IDs do grupo de processos são mostrados como números "
+"decimais entre parênteses após cada nome de processo. B<-g> desativa "
+"implicitamente a compactação. Se os PIDs e os PGIDs forem exibidos, os PIDs "
+"serão mostrados primeiro."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "Usa caracteres VT100 no desenho de linhas."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid ""
+"Highlight the current process and its ancestors. This is a no-op if the "
+"terminal doesn't support highlighting or if neither the current process nor "
+"any of its ancestors are in the subtree being shown."
+msgstr ""
+"Realça o processo atual e seus ancestrais. Este é um ambiente autônomo se o "
+"terminal não suportar o realce ou se nem o processo atual nem qualquer um de "
+"seus ancestrais estiverem na subárvore sendo exibida."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid ""
+"Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, "
+"B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr ""
+"Como B<-h>, mas realça o processo especificado. Ao contrário de B<-h>, "
+"B<pstree> falha ao usar B<-H> se o realce não estiver disponível."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid ""
+"Display long lines. By default, lines are truncated to either the COLUMNS "
+"environment variable or the display width. If neither of these methods "
+"work, the default of 132 columns is used."
+msgstr ""
+"Exibe linhas longas. Por padrão, as linhas são truncadas para a variável de "
+"ambiente COLUMNS ou para a largura da tela. Se nenhum desses métodos "
+"funcionar, o padrão de 132 colunas será usado."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid ""
+"Sort processes with the same parent by PID instead of by name. (Numeric "
+"sort.)"
+msgstr ""
+"Classifica processos com o mesmo pai por PID em vez de por nome. "
+"(Classificação numérica.)"
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid ""
+"Show individual trees for each namespace of the type specified. The "
+"available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, "
+"I<uts>. Regular users don't have access to other users' processes "
+"information, so the output will be limited."
+msgstr ""
+"Mostra árvores individuais para cada espaço de nomes do tipo especificado. "
+"Os tipos disponíveis são: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, "
+"I<uts>. Os usuários comuns não têm acesso às informações dos processos de "
+"outros usuários, então a saída será limitada."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid ""
+"Show PIDs. PIDs are shown as decimal numbers in parentheses after each "
+"process name. B<-p> implicitly disables compaction."
+msgstr ""
+"Mostra PIDs. Os PIDs são mostrados como números decimais entre parênteses "
+"após cada nome de processo. B<-p> desabilita implicitamente a compactação."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "Mostra processos pais do processo especificado."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid ""
+"Show namespaces transitions. Like B<-N>, the output is limited when running "
+"as a regular user."
+msgstr ""
+"Mostra transições de espaços de nomes. Como B<-N>, a saída é limitada quando "
+"executado como um usuário comum."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "Mostra os nomes completos dos threads quando disponíveis."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "Oculta threads e só mostra processos."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid ""
+"Show uid transitions. Whenever the uid of a process differs from the uid of "
+"its parent, the new uid is shown in parentheses after the process name."
+msgstr ""
+"Mostra transições de uid. Sempre que o uid de um processo difere do uid de "
+"seu pai, o novo uid é mostrado entre parênteses após o nome do processo."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid ""
+"Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, "
+"UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with "
+"B<echo -e '\\033%@'>."
+msgstr ""
+"Usa caracteres de desenho de linha UTF-8 (Unicode). No Linux 1.1-54 e "
+"superior, o modo UTF-8 é inserido no console com B<echo -e '\\033%8'> e "
+"deixado com B<echo -e '\\033%@'>."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid ""
+"Show the current security attributes of the process. For SELinux systems "
+"this will be the security context."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr ""
+"Alguns conjuntos de caracteres podem ser incompatíveis com os caracteres "
+"VT100."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+#, fuzzy
+#| msgid "B<ps>(1), B<top>(1)."
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1)."
+
+#, no-wrap
+#~ msgid "B<->"
+#~ msgstr "B<->"
+
+#~ msgid "Reset all options and set the signal back to SIGKILL."
+#~ msgstr "Redefine todas as opções e defina o sinal de volta para SIGKILL."
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
+
+#~ msgid ""
+#~ "(SELinux) Show security context for each process. This flag will only "
+#~ "work if B<pstree> is compiled with SELinux support."
+#~ msgstr ""
+#~ "(SELinux) Mostra o contexto de segurança para cada processo. Este "
+#~ "sinalizador só funcionará se B<pstree> for compilado com suporte SELinux."
diff --git a/man-po/pt_BR/fuser.1 b/man-po/pt_BR/fuser.1
new file mode 100644
index 0000000..e2888ce
--- /dev/null
+++ b/man-po/pt_BR/fuser.1
@@ -0,0 +1,221 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 2022\-11\-02 psmisc "Comandos de usuário"
+.SH NOME
+fuser \- identifica processos usando arquivos ou soquetes
+.SH SINOPSE
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP \fIspace\fP]
+[\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fISIGNAL\fP] ] \fIname\fP ...
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH DESCRIÇÃO
+\fBfuser\fP exibe os PIDs de processos usando os arquivos ou sistemas de
+arquivos especificados. No modo de exibição padrão, cada nome de arquivo é
+seguido por uma letra que indica o tipo de acesso:
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+diretório atual.
+.TP
+\fBe\fP
+executável que está em execução.
+.TP
+\fBf\fP
+abre um arquivo. \fBf\fP é omitido no modo de exibição padrão.
+.TP
+\fBF\fP
+abre arquivo para escrita. \fBF\fP é omitido no modo de exibição padrão.
+.TP
+\fBr\fP
+diretório raiz.
+.TP
+\fBm\fP
+biblioteca compartilhada ou arquivo que foram mapeados com mmap.
+.TP
+\&\fB.\fP
+Espaço reservado, omitido no modo de exibição padrão.
+.PD
+.RE
+.LP
+\fBfuser\fP retorna um código de retorno diferente de zero se nenhum dos
+arquivos especificados for acessado ou no caso de um erro fatal. Se pelo
+menos um acesso for encontrado, \fBfuser\fP retorna zero.
+.PP
+Para pesquisar processos usando soquetes TCP e UDP, o espaço de nomes
+correspondente deve ser selecionado com a opção \fB\-n\fP. Por padrão, \fBfuser\fP
+procurará nos soquetes IPv6 e IPv4. Para alterar o comportamento padrão, use
+as opções \fB\-4\fP e \fB\-6\fP. Os soquetes podem ser especificados pela porta
+local e remota e pelo endereço remoto. Todos os campos são opcionais, mas as
+vírgulas na frente dos campos ausentes devem estar presentes:
+.PP
+[\fIporta_lcl\fP][,[\fIhost_rmt\fP][,[\fIporta_rmt\fP]]]
+.PP
+Valores simbólicos ou numéricos podem ser usados para endereços IP e números
+de porta.
+.PP
+\fBfuser\fP emite apenas os PIDs para stdout, todo o resto é enviado para
+stderr.
+.SH OPÇÕES
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+Mostra todos os arquivos especificados na linha de comando. Por padrão,
+apenas os arquivos acessados por pelo menos um processo são mostrados.
+.TP
+\fB\-c\fP
+Igual à opção \fB\-m\fP, usada para compatibilidade POSIX.
+.TP
+\fB\-f\fP
+Ignorado silenciosamente, usado para compatibilidade POSIX.
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+Mata os processos que acessam o arquivo. A menos que seja alterado com
+\fB\-\fP\fISIGNAL\/\fP, SIGKILL é enviado. Um processo \fBfuser\fP nunca mata a si
+próprio, mas pode matar outros processos \fBfuser\fP. O ID de usuário efetivo
+do processo que executa \fBfuser\fP é definido com seu ID de usuário real antes
+de tentar matar.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+Peça confirmação ao usuário antes de encerrar um processo. Esta opção é
+silenciosamente ignorada se \fB\-k\fP também não estiver presente.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+Para o espaço de nomes de \fBfile\fP, deixa todas as comparações serem baseadas
+nos inodes do(s) arquivo(s) especificado(s) e nunca nos nomes dos arquivos,
+mesmo em sistemas de arquivos baseados em rede.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+Lista todos os nomes de sinal conhecidos.
+.TP
+\fB\-m\fP\fI NAME\fP, \fB\-\-mount \fP\fINAME\fP
+\fINAME\fP specifies a file on a mounted file system or a block device that is
+mounted. All processes accessing files on that file system are listed. If
+a directory is specified, it is automatically changed to \fINAME\fP/ to use any
+file system that might be mounted on that directory.
+.TP
+\fB\-M\fP, \fB\-\-ismountpoint\fP
+A solicitação será atendida apenas se \fINOME\fP especificar um ponto de
+montagem. Este é um cinto de segurança inestimável que o impede de matar a
+máquina se \fINOME\fP não for um sistema de arquivos.
+.TP
+\fB\-w\fP
+Mata apenas os processos que têm acesso de escrita. Esta opção é
+silenciosamente ignorada se \fB\-k\fP também não estiver presente.
+.TP
+\fB\-n\fP\fI ESPAÇO\ DE\ NOMES\fP, \fB\-\-namespace \fP\fIESPAÇO\ DE\ NOMES\fP
+Seleciona um espaço de nome diferente. Os espaços de nomes \fBfile\fP (nomes de
+arquivo, o padrão), \fBudp\fP (portas UDP locais) e \fBtcp\fP (portas TCP locais)
+são suportados. Para portas, o número da porta ou o nome simbólico podem ser
+especificados. Se não houver ambiguidade, a notação de atalho
+\fInome\fP\fB/\fP\fIespaço\fP (por exemplo, \fI80\fP\fB/\fP\fItcp\fP) pode ser usada.
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+Operação silenciosa. \fB\-u\fP e \fB\-v\fP são ignorados neste modo. \fB\-a\fP não deve
+ser usado com \fB\-s\fP.
+.TP
+\fB\-\fP\fISINAL\fP
+Usa o sinal especificado em vez de SIGKILL ao matar processos. Os sinais
+podem ser especificados por nome (por exemplo, \fB\-HUP\fP) ou por número (por
+exemplo, \fB\-1\fP). Esta opção é silenciosamente ignorada se a opção \fB\-k\fP não
+for usada.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+Anexa o nome de usuário do proprietário do processo a cada PID.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+Modo detalhado. Os processos são mostrados no estilo \fBps\fP. Os campos PID,
+USER e COMMAND são semelhantes a \fBps\fP. ACCESS mostra como o processo acessa
+o arquivo. O modo detalhado também mostrará quando um arquivo específico
+está sendo acessado como um ponto de montagem, exportação de knfs ou arquivo
+de troca. Neste caso, \fBkernel\fP é mostrado em vez do PID.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Exibe informação da versão.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+Pesquisa apenas soquetes IPv4. Esta opção não deve ser usada com a opção
+\fB\-6\fP e só tem efeito com os espaços de nomes tcp e udp.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+Pesquisa apenas soquetes IPv6. Esta opção não deve ser usada com a opção
+\fB\-4\fP e só tem efeito com os espaços de nomes tcp e udp.
+.SH ARQUIVOS
+.TP
+/proc
+local do sistema de arquivos proc
+.SH EXEMPLOS
+.TP
+\fBfuser \-km /home\fP
+mata todos os processos que acessam o sistema de arquivos /home de qualquer
+forma.
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fIcomando\fP\fB; fi\fP
+invoca \fIcomando\fP se nenhum outro processo estiver usando /dev/ttyS1.
+.TP
+\fBfuser telnet/tcp\fP
+mostra todos os processos na porta TELNET (local).
+.SH RESTRIÇÕES
+Os processos que acessam o mesmo arquivo ou sistema de arquivos várias vezes
+da mesma maneira são mostrados apenas uma vez.
+.PP
+Se o mesmo objeto for especificado várias vezes na linha de comando, algumas
+dessas entradas podem ser ignoradas.
+.PP
+\fBfuser\fP só pode ser capaz de coletar informações parciais, a menos que seja
+executado com privilégios. Como consequência, os arquivos abertos por
+processos pertencentes a outros usuários podem não ser listados e os
+executáveis podem ser classificados apenas como mapeados.
+.PP
+\fBfuser\fP não pode relatar sobre nenhum processo para o qual não tenha
+permissão para consultar a tabela do descritor de arquivo. O momento mais
+comum em que esse problema ocorre é ao procurar soquetes TCP ou UDP ao
+executar \fBfuser\fP como um usuário não root. Neste caso, \fBfuser\fP relatará
+nenhum acesso.
+.PP
+Instalar o \fBfuser\fP com root SUID evitará problemas associados a informações
+parciais, mas pode ser indesejável por razões de segurança e privacidade.
+.PP
+Os espaços de nomes \fBudp\fP e \fBtcp\fP e soquetes de domínio UNIX não podem ser
+pesquisados com kernels anteriores a 1.3.78.
+.PP
+Os acessos pelo kernel são mostrados apenas com a opção \fB\-v\fP.
+.PP
+A opção \fB\-k\fP funciona apenas em processos. Se o usuário for o kernel,
+\fBfuser\fP imprimirá um conselho, mas não fará nada além disso.
+.PP
+\fBfuser\fP will not see block devices mounted by processes in a different
+mount namespace. This is due to the device ID shown in the process' file
+descriptor table being from the process namespace, not fuser's; meaning it
+won't match.
+.SH BUGS
+.PP
+\fBfuser \-m /dev/sgX\fP vai mostrar (ou matar com o sinalizador \fB\-k\fP) todos os
+processos, mesmo se você não tiver aquele dispositivo configurado. Pode
+haver outros dispositivos para os quais ele também faz isso.
+.PP
+A opção de montagem \fB\-m\fP vai corresponder a qualquer arquivo dentro do
+mesmo dispositivo que o arquivo especificado, use a opção \fB\-M\fP também se
+você pretende especificar apenas o ponto de montagem.
+.PP
+\fBfuser\fP will not match mapped files, such as a process' shared libraries if
+they are on a \fBbtrfs\fP(5) filesystem due to the device IDs being different
+for \fBstat\fP(2) and \fI/proc/<PID>/maps\fP.
+.SH "VEJA TAMBÉM"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/pt_BR/killall.1 b/man-po/pt_BR/killall.1
new file mode 100644
index 0000000..4a588b5
--- /dev/null
+++ b/man-po/pt_BR/killall.1
@@ -0,0 +1,129 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH KILLALL 1 2023\-06\-17 psmisc "Comandos de usuário"
+.SH NOME
+killall \- mata processos por nome
+.SH SINOPSE
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fIpattern\fP] [\fB\-e\fP,\fB\ \-\-exact\fP] [\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP \fIPID\fP]
+[\fB\-o\fP,\fB\ \-\-older\-than\fP \fITIME\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP] [\fB\-r\fP,\fB\ \-\-regexp\fP]
+[\fB\-s\fP,\fB\ \-\-signal\fP \fISIGNAL\fP,\ \fB\-\fP\fISIGNAL\fP] [\fB\-u\fP,\fB\ \-\-user\fP \fIuser\fP]
+[\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP] [\fB\-y\fP,\fB\ \-\-younger\-than\fP
+\fITIME\fP] [\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\fB\ \-\-version\fP] [\fB\-\-\fP] \fIname\fP
+\&...
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH DESCRIÇÃO
+\fBkillall\fP envia um sinal para todos os processos que executam qualquer um
+dos comandos especificados. Se nenhum nome de sinal for especificado,
+SIGTERM será enviado.
+.PP
+Signals can be specified either by name (e.g.\& \fB\-HUP\fP or \fB\-SIGHUP\fP) or
+by number (e.g.\& \fB\-1\fP) or by option \fB\-s\fP.
+.PP
+Se o nome do comando não for uma expressão regular (opção \fB\-r\fP) e contiver
+uma barra (\fB/\fP), os processos que executam aquele arquivo específico serão
+selecionados para eliminação, independente de seu nome.
+.PP
+\fBkillall\fP retorna um código de retorno zero se pelo menos um processo foi
+eliminado para cada comando listado, ou nenhum comando foi listado e pelo
+menos um processo correspondeu aos critérios de pesquisa \fB\-u\fP e
+\fB\-Z\fP. \fBkillall\fP retorna diferente de zero, caso contrário.
+.PP
+Um processo \fBkillall\fP nunca se mata (mas pode matar outros processos
+\fBkillall\fP).
+.SH OPÇÕES
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+Requer uma correspondência exata para nomes muito longos. Se um nome de
+comando tiver mais de 15 caracteres, o nome completo pode não estar
+disponível (ou seja, foi trocado). Nesse caso, \fBkillall\fP matará tudo o que
+corresponder aos primeiros 15 caracteres. Com \fB\-e\fP, essas entradas são
+ignoradas. \fBkillall\fP imprime uma mensagem para cada entrada ignorada se
+\fB\-v\fP for especificado além de \fB\-e\fP.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+Faz correspondência de nomes de processo sem diferenciar maiusculização de
+minúsculo.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+Mata o grupo de processos ao qual o processo pertence. O sinal de eliminação
+é enviado apenas uma vez por grupo, mesmo se vários processos pertencentes
+ao mesmo grupo de processos forem encontrados.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+Pede confirmação interativamente antes de matar.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+Lista todos os nomes de sinal conhecidos.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+Compara com o espaço de nomes do PID ao PID fornecido. O padrão é
+corresponder a todos os espaço de nomes.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+Corresponde apenas aos processos que são mais antigos (iniciados antes) da
+hora especificada. O tempo é especificado como um flutuante e depois como
+uma unidade. As unidades são s,m,h,d,w,M,y para segundos, minutos, horas,
+dias, semanas, meses e anos, respectivamente.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+Não reclama se nenhum processo tiver sido eliminado.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+Interpreta o padrão do nome do processo como uma expressão regular estendida
+POSIX, por \fBregex\fP(3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fISIGNAL\fP"
+Envia este sinal ao invés de SIGTERM.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+Mata apenas os processos que o usuário especificado possui. Os nomes dos
+comandos são opcionais.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+Relata se o sinal foi enviado com sucesso.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+Exibe informação da versão.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+Aguarda todos os processos eliminados morrerem. \fBkillall\fP verifica uma vez
+a cada segundo se algum dos processos eliminados ainda existe e só retorna
+se nenhum sobrar. Observe que \fBkillall\fP pode esperar para sempre se o sinal
+for ignorado, não tiver efeito ou se o processo permanecer no estado zumbi.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+Corresponde apenas aos processos que são mais recentes (iniciados após) o
+tempo especificado. O tempo é especificado como um flutuante e depois como
+uma unidade. As unidades são s,m,h,d,w,M,y para segundos, minutos, horas,
+dias, semanas, meses e anos, respectivamente.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+Specify security context: kill only processes having security context that
+match with given extended regular expression pattern. Must precede other
+arguments on the command line. Command names are optional.
+.SH ARQUIVOS
+.TP
+/proc
+local do sistema de arquivos proc
+.SH "BUGS CONHECIDOS"
+Matar por arquivo só funciona para executáveis que são mantidos abertos
+durante a execução, ou seja, executáveis impuros não podem ser matados dessa
+maneira.
+.PP
+Esteja avisado que digitar \fBkillall\fP \fInome\fP pode não ter o efeito desejado
+em sistemas não Linux, especialmente quando feito por um usuário
+privilegiado.
+.PP
+\fBkillall \-w\fP não detecta se um processo desaparece e é substituído por um
+novo processo com o mesmo PID entre as varreduras.
+.PP
+Se os processos mudarem de nome, \fBkillall\fP pode não ser capaz de
+correspondê\-los corretamente.
+.PP
+\fBkillall\fP tem um limite de nomes que podem ser especificados na linha de
+comando. Este número é o tamanho de um inteiro longo sem sinal multiplicado
+por 8. Para a maioria dos sistemas de 32 bits, o limite é 32 e, da mesma
+forma, para um sistema de 64 bits, o limite é geralmente 64.
+.SH "VEJA TAMBÉM"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBregex\fP(3).
diff --git a/man-po/pt_BR/peekfd.1 b/man-po/pt_BR/peekfd.1
new file mode 100644
index 0000000..e0a9732
--- /dev/null
+++ b/man-po/pt_BR/peekfd.1
@@ -0,0 +1,61 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 2021\-12\-01 psmisc "Comandos de usuário"
+.SH NOME
+peekfd \- dá uma olhada nos descritores de arquivo dos processos em execução
+.SH SINOPSE
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-c\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIpid\fP [\fIfd\fP] [\fIfd\fP] ...
+.SH DESCRIÇÃO
+\fBpeekfd\fP anexa a um processo em execução e intercepta todas as leituras e
+escritas nos descritores de arquivo. Você pode especificar os números do
+descritor de arquivo desejados ou despejar todos eles.
+.SH OPÇÕES
+.IP \-8
+Não faz pós\-processamento nos bytes que estão sendo lidos ou escritos.
+.IP \-n
+Não exibe cabeçalhos indicando a origem dos bytes despejados.
+.IP \-c
+Também despeja a atividade do descritor de arquivo solicitada em quaisquer
+novos processos filhos criados.
+.IP \-d
+Remove leituras/escritas duplicadas da saída. Se você está olhando para um
+tty com eco, você pode querer isso.
+.IP \-v
+Exibe uma string de versão.
+.IP \-h
+Mostra a mensagem de ajuda.
+.SH ARQUIVOS
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+Não é usado, mas é útil para o usuário olhar para obter bons números do
+descritor de arquivo.
+.SH AMBIENTE
+Nenhum.
+.SH DIAGNÓSTICOS
+Os seguintes diagnósticos podem ser emitidos na stderr (saída de erro):
+.TP
+\fBError attaching to pid \fP\fI<PID>\fP
+Ocorreu um erro desconhecido ao tentar anexar a um processo; pode ser
+necessário ser root.
+.SH BUGS
+Provavelmente muitos. Não se surpreenda se o processo que você está
+monitorando morrer.
+.SH AUTOR
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "VEJA TAMBÉM"
+\fBttysnoop\fP(8)
diff --git a/man-po/pt_BR/prtstat.1 b/man-po/pt_BR/prtstat.1
new file mode 100644
index 0000000..b524436
--- /dev/null
+++ b/man-po/pt_BR/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 "9 de setembro de 2020" psmisc "Comandos de usuário"
+.SH NOME
+prtstat \- exibe informações sobre um processo
+.SH SINOPSE
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH DESCRIÇÃO
+\fBprtstat\fP prints the statistics of the specified process. This information
+comes from the \fB/proc/\fP\fIpid\fP\fB/stat\fP file.
+.SH OPÇÕES
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+Exibe informações no formato bruto (não tratado).
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+Exibe as informações de versão para \fBprtstat\fP.
+.SH ARQUIVOS
+.TP
+\fB/proc/\fP\fIpid\fP\fB/stat\fP
+fonte das informações que o \fBprtstat\fP usa.
diff --git a/man-po/pt_BR/pslog.1 b/man-po/pt_BR/pslog.1
new file mode 100644
index 0000000..1c2d967
--- /dev/null
+++ b/man-po/pt_BR/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 "9 de setembro de 2020" Linux\(dq "Manual do Usuário do Linux"
+.SH NOME
+pslog \- report current logs path of a process
+.SH SINOPSE
+.ad l
+\fBpslog\fP \fIpid\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH DESCRIÇÃO
+O comando \fBpslog\fP relata os logs de trabalho atuais de um processo.
+.SH OPÇÕES
+.TP
+\fB\-V\fP
+Exibe informação da versão.
+.SH "VEJA TAMBÉM"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH AUTOR
+Vito Mule\(cq
+.MT mulevito@gmail.com
+.ME
+wrote \fBpslog\fP in
+2015. Please send bug reports to
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/pt_BR/pstree.1 b/man-po/pt_BR/pstree.1
new file mode 100644
index 0000000..f7ffa69
--- /dev/null
+++ b/man-po/pt_BR/pstree.1
@@ -0,0 +1,138 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 2021\-06\-21 psmisc "Comandos de usuário"
+.SH NOME
+pstree \- exibe uma árvore de processos
+.SH SINOPSE
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIattr\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fI\ pid\fP,\fB\ \-\-highlight\-pid\ \fP\fIpid\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fIns\fP] [\fB\-p\fP,\fB\ \-\-show\-pids\fP]
+[\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP] [\fB\-u\fP,\fB\ \-\-uid\-changes\fP]
+[\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIpid\fP,\fB\ \fP\fIuser\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH DESCRIÇÃO
+\fBpstree\fP mostra os processos em execução como uma árvore. A árvore está
+enraizada em \fIpid\fP ou \fBinit\fP se \fIpid\fP for omitido. Se um nome de usuário
+for especificado, todas as árvores de processo enraizadas em processos
+pertencentes a esse usuário serão mostradas.
+.PP
+\fBpstree\fP mescla visualmente ramos idênticos colocando\-os entre colchetes e
+prefixando\-os com a contagem de repetição. Por exemplo:
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+se torna
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+Threads filhos de um processo são encontrados sob o processo pai e são
+mostrados com o nome do processo entre chaves. Por exemplo:
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+Se \fBpstree\fP for chamado como \fBpstree.x11\fP, ele solicitará que o usuário no
+final da linha pressione Enter e não retornará até que isso aconteça. Isso é
+útil quando \fBpstree\fP é executado em um xterminal.
+.PP
+Certos parâmetros do kernel ou de montagem, como a opção \fIhidepid\fP para
+procfs, irão ocultar informações para alguns processos. Nessas situações,
+\fBpstree\fP tentará construir a árvore sem essas informações, mostrando os
+nomes dos processos como pontos de interrogação.
+
+.SH OPÇÕES
+.IP \fB\-a\fP
+Mostra os argumentos da linha de comando. Se a linha de comando de um
+processo for trocada, esse processo será mostrado entre parênteses. \fB\-a\fP
+desativa implicitamente a compactação para processos, mas não para threads.
+.IP \fB\-A\fP
+Usa caracteres ASCII para desenhar a árvore.
+.IP \fB\-c\fP
+Desativa a compactação de subárvores idênticas. Por padrão, as subárvores
+são compactadas sempre que possível.
+.IP \fB\-C\fP
+Color the process name by given attribute. Currently \fBpstree\fP only accepts
+the value \fBage\fP which colors by process age. Processes newer than 60
+seconds are green, newer than an hour yellow and the remaining red.
+.IP \fB\-g\fP
+Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses
+after each process name. If both PIDs and PGIDs are displayed then PIDs are
+shown first.
+.IP \fB\-G\fP
+Usa caracteres VT100 no desenho de linhas.
+.IP \fB\-h\fP
+Realça o processo atual e seus ancestrais. Este é um ambiente autônomo se o
+terminal não suportar o realce ou se nem o processo atual nem qualquer um de
+seus ancestrais estiverem na subárvore sendo exibida.
+.IP \fB\-H\fP
+Como \fB\-h\fP, mas realça o processo especificado. Ao contrário de \fB\-h\fP,
+\fBpstree\fP falha ao usar \fB\-H\fP se o realce não estiver disponível.
+.IP \fB\-l\fP
+Exibe linhas longas. Por padrão, as linhas são truncadas para a variável de
+ambiente COLUMNS ou para a largura da tela. Se nenhum desses métodos
+funcionar, o padrão de 132 colunas será usado.
+.IP \fB\-n\fP
+Classifica processos com o mesmo pai por PID em vez de por
+nome. (Classificação numérica.)
+.IP \fB\-N\fP
+Mostra árvores individuais para cada espaço de nomes do tipo
+especificado. Os tipos disponíveis são: \fIipc\fP, \fImnt\fP, \fInet\fP, \fIpid\fP,
+\fItime\fP, \fIuser\fP, \fIuts\fP. Os usuários comuns não têm acesso às informações
+dos processos de outros usuários, então a saída será limitada.
+.IP \fB\-p\fP
+Mostra PIDs. Os PIDs são mostrados como números decimais entre parênteses
+após cada nome de processo. \fB\-p\fP desabilita implicitamente a compactação.
+.IP \fB\-s\fP
+Mostra processos pais do processo especificado.
+.IP \fB\-S\fP
+Mostra transições de espaços de nomes. Como \fB\-N\fP, a saída é limitada quando
+executado como um usuário comum.
+.IP \fB\-t\fP
+Mostra os nomes completos dos threads quando disponíveis.
+.IP \fB\-T\fP
+Oculta threads e só mostra processos.
+.IP \fB\-u\fP
+Mostra transições de uid. Sempre que o uid de um processo difere do uid de
+seu pai, o novo uid é mostrado entre parênteses após o nome do processo.
+.IP \fB\-U\fP
+Usa caracteres de desenho de linha UTF\-8 (Unicode). No Linux 1.1\-54 e
+superior, o modo UTF\-8 é inserido no console com \fBecho \-e '\033%8'\fP e
+deixado com \fBecho \-e '\033%@'\fP.
+.IP \fB\-V\fP
+Exibe informação da versão.
+.IP \fB\-Z\fP
+Show the current security attributes of the process. For SELinux systems
+this will be the security context.
+.SH ARQUIVOS
+.TP
+/proc
+local do sistema de arquivos proc
+.SH BUGS
+Alguns conjuntos de caracteres podem ser incompatíveis com os caracteres
+VT100.
+.SH "VEJA TAMBÉM"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/man-po/ro.po b/man-po/ro.po
new file mode 100644
index 0000000..6ab3b42
--- /dev/null
+++ b/man-po/ro.po
@@ -0,0 +1,1368 @@
+# Mesajele în limba română pentru psmisc-man, pachetul psmisc.
+# Copyright © 2022, 2024 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022 - 2024.
+#
+# Cronologia traducerii fiÈ™ierului „psmisc-manâ€:
+# Traducerea inițială, făcută de R-GC, pentru versiunea psmisc-man 23.5rc1, sep-2022.
+# Actualizare a traducerii pentru versiunea 23.6-rc1, făcută de R-GC, dec-2022.
+# Actualizare a traducerii pentru versiunea 23.7-rc1, făcută de R-GC, feb-2024.
+# Actualizare a traducerii pentru versiunea Y, făcută de X, Y(anul).
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.7-rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2024-02-13 19:33+0100\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || ((n%100) > 0 && (n%100) < 20)) ? 1 : 2);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr "02.11.2022"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "Comenzi pentru utilizator"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "NUME"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser - identifică procesele care utilizează fișiere sau socluri"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "REZUMAT"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<spațiu_nume>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SEMNAL>] ] I<nume> ..."
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "DESCRIERE"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid "B<fuser> displays the PIDs of processes using the specified files or file systems. In the default display mode, each file name is followed by a letter denoting the type of access:"
+msgstr "B<fuser> afișează PID-urile proceselor care utilizează fișierele sau sistemele de fișiere specificate. În modul de afișare implicit, fiecare nume de fișier este urmat de o literă care indică tipul de acces:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "directorul curent."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "executabil în curs de executare."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "fișier deschis.. B<f> este omis în modul de afișare implicit."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr "fișier deschis pentru scriere. B<F> este omis în modul de afișare implicit."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "directorul rădăcină."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "fișier alocat cu «mmap» sau bibliotecă partajată."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr "Substituent, omis în modul de afișare implicit."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid "B<fuser> returns a non-zero return code if none of the specified files is accessed or in case of a fatal error. If at least one access has been found, B<fuser> returns zero."
+msgstr "B<fuser> returnează un cod de returnare diferit de zero dacă niciunul dintre fișierele specificate nu este accesat sau în cazul unei erori fatale. Dacă a fost găsit cel puțin un fișier accesat, B<fuser> returnează zero."
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid "In order to look up processes using TCP and UDP sockets, the corresponding name space has to be selected with the B<-n> option. By default B<fuser> will look in both IPv6 and IPv4 sockets. To change the default behavior, use the B<-4> and B<-6> options. The socket(s) can be specified by the local and remote port, and the remote address. All fields are optional, but commas in front of missing fields must be present:"
+msgstr "Pentru a căuta procese folosind socluri TCP și UDP, spațiul de nume corespunzător trebuie să fie selectat cu opțiunea B<-n>. În mod implicit, B<fuser> va căuta atât în soclurile IPv6, cât și în soclurile IPv4. Pentru a modifica comportamentul implicit, utilizați opțiunile B<-4> și B<-6>. Soclurile pot fi specificate prin portul local și de la distanță și prin adresa de la distanță. Toate câmpurile sunt opționale, dar virgulele din fața câmpurilor lipsă trebuie să fie prezente:"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<port_local>][,[I<gazdă_rmt>][,[I<port_rmt>]]] \tnotă: rmt = la distanță(remote)"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid "Either symbolic or numeric values can be used for IP addresses and port numbers."
+msgstr "Puteți utiliza fie valori simbolice, fie valori numerice pentru adresele IP și numerele de porturi."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid "B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr "B<fuser> afișează doar PID-urile la ieșirea standard, orice altceva este trimis către ieșirea de eroare standard."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "OPÈšIUNI"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid "Show all files specified on the command line. By default, only files that are accessed by at least one process are shown."
+msgstr "Afișează toate fișierele specificate în linia de comandă. În mod implicit, sunt afișate doar fișierele care sunt accesate de cel puțin un proces."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "La fel ca și opțiunea B<-m>, utilizată pentru compatibilitatea cu POSIX."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "Ignorată în tăcere, utilizată pentru compatibilitatea cu POSIX."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid "Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, SIGKILL is sent. An B<fuser> process never kills itself, but may kill other B<fuser> processes. The effective user ID of the process executing B<fuser> is set to its real user ID before attempting to kill."
+msgstr "Omoară procesele care accesează fișierul. Cu excepția cazului în care este schimbat cu opțiunea B<->I<SIGNAL\\/>, semnalul SIGKILL este semnalul trimis procesului. Un proces B<fuser> nu se omoară pe el însuși niciodată, dar poate omorî alte procese B<fuser>. ID-ul de utilizator efectiv al procesului care execută B<fuser> este reamplasat cu ID-ul de utilizator real înainte de a încerca să ucidă."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid "Ask the user for confirmation before killing a process. This option is silently ignored if B<-k> is not present too."
+msgstr "Cere utilizatorului confirmarea înainte de a omorî un proces. Această opțiune este ignorată în tăcere dacă opțiunea B<-k> nu este deasemeni prezentă."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid "For the name space B<file> let all comparisons be based on the inodes of the specified file(s) and never on the file names even on network based file systems."
+msgstr "Pentru spațiul de nume B<fișier>, toate comparațiile trebuie să se bazeze pe nodul-i al fișierelor specificate și niciodată pe numele fișierelor, chiar și pe sistemele de fișiere bazate pe rețea."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "Listează toate numele semnalelor cunoscute."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< NUME>, B<--mount >I<NUME>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid "I<NAME> specifies a file on a mounted file system or a block device that is mounted. All processes accessing files on that file system are listed. If a directory is specified, it is automatically changed to I<NAME>/ to use any file system that might be mounted on that directory."
+msgstr "I<NUME> specifică un fișier pe un sistem de fișiere montat sau un dispozitiv bloc care este montat. Sunt listate toate procesele care accesează fișierele din acel sistem de fișiere. Dacă este specificat un director, acesta este schimbat automat în I<NUME>/ pentru a utiliza orice sistem de fișiere care ar putea fi montat pe acel director."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid "Request will be fulfilled only if I<NAME> specifies a mountpoint. This is an invaluable seat belt which prevents you from killing the machine if I<NAME> happens to not be a filesystem."
+msgstr "Solicitarea va fi îndeplinită numai dacă I<NUME> specifică un punct de montare. Aceasta este o centură de siguranță neprețuită care vă împiedică să ucideți mașina dacă I<NUME> se întâmplă să nu fie un sistem de fișiere."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid "Kill only processes which have write access. This option is silently ignored if B<-k> is not present too."
+msgstr "Omoară numai procesele care au acces de scriere. Această opțiune este ignorată în tăcere dacă opțiunea B<-k> nu este deasemeni prezentă."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< SPAÈšIU_NUME>, B<--namespace >I< SPAÈšIU_NUME>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid "Select a different name space. The name spaces B<file> (file names, the default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are supported. For ports, either the port number or the symbolic name can be specified. If there is no ambiguity, the shortcut notation I<name>B</>I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr "Selectează un alt spațiu de nume. Sunt acceptate spațiile de nume B<fișier> (nume de fișiere, implicit), B<udp> (porturi UDP locale) și B<tcp> (porturi TCP locale). Pentru porturi, poate fi specificat fie numărul portului, fie numele simbolic. Dacă nu există ambiguitate, poate fi folosită notația scurtă I<nume>B</>I<spațiu> (de exemplu, I<80>B</>I<tcp>)."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid "Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not be used with B<-s>."
+msgstr "Funcționare silențioasă. Opțiunile B<-u> și B<-v> sunt ignorate în acest mod. Opțiunea B<-a> nu trebuie să fie utilizată cu opțiunea B<-s>."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<SEMNAL>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid "Use the specified signal instead of SIGKILL when killing processes. Signals can be specified either by name (e.g., B<-HUP>) or by number (e.g., B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr "Utilizează semnalul specificat în loc de SIGKILL atunci când omoară procesele. Semnalele pot fi specificate fie după nume (de exemplu, B<-HUP>), fie după număr (de exemplu, B<-1>). Această opțiune este ignorată în tăcere dacă nu este utilizată opțiunea B<-k>."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "Adaugă numele de utilizator al proprietarului procesului la fiecare PID."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid "Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, USER and COMMAND are similar to B<ps>. ACCESS shows how the process accesses the file. Verbose mode will also show when a particular file is being accessed as a mount point, knfs export or swap file. In this case B<kernel> is shown instead of the PID."
+msgstr "Modul informaÈ›ie-detaliată. Procesele sunt afiÈ™ate într-un stil asemănător comenzii B<ps>. Câmpurile PID, UTILIZATOR È™i COMANDÄ‚ sunt similare cu cele ale B<ps>. ACCES arată modul în care procesul accesează fiÈ™ierul. Modul informaÈ›ie-detaliată va afiÈ™a, de asemenea, când un anumit fiÈ™ier este accesat ca punct de montare, export knfs sau fiÈ™ier de spaÈ›iu de interschimb „swapâ€. ÃŽn acest caz, B<nucleul> este afiÈ™at în loc de PID."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "Afișează informațiile despre versiune."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid "Search only for IPv4 sockets. This option must not be used with the B<-6> option and only has an effect with the tcp and udp namespaces."
+msgstr "Caută doar socluri IPv4. Această opțiune nu trebuie utilizată cu opțiunea B<-6> și are efect doar cu spațiile de nume tcp și udp."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid "Search only for IPv6 sockets. This option must not be used with the B<-4> option and only has an effect with the tcp and udp namespaces."
+msgstr "Caută doar socluri IPv6. Această opțiune nu trebuie utilizată cu opțiunea B<-4> și are efect doar cu spațiile de nume tcp și udp."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "FIȘIERE"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "locația sistemului de fișiere proc"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "EXEMPLE"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr "omoară toate procesele care accesează sistemul de fișiere „/home†în orice fel (citire, scriere, creare, .. etc.)."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<comanda>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "invocă I<comanda> dacă niciun alt proces nu utilizează /dev/ttyS1."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "afișează toate procesele de la portul (local) TELNET."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "RESTRICÈšII"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid "Processes accessing the same file or file system several times in the same way are only shown once."
+msgstr "Procesele care accesează același fișier sau sistem de fișiere de mai multe ori în același mod sunt afișate o singură dată."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid "If the same object is specified several times on the command line, some of those entries may be ignored."
+msgstr "Dacă același obiect este specificat de mai multe ori în linia de comandă, unele dintre aceste intrări pot fi ignorate."
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid "B<fuser> may only be able to gather partial information unless run with privileges. As a consequence, files opened by processes belonging to other users may not be listed and executables may be classified as mapped only."
+msgstr "B<fuser> poate obține doar informații parțiale, cu excepția cazului în care rulează cu privilegii. În consecință, fișierele deschise de procese aparținând altor utilizatori pot să nu fie listate și executabilele pot să fie clasificate doar ca asociate cu fișierul."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid "B<fuser> cannot report on any processes that it doesn't have permission to look at the file descriptor table for. The most common time this problem occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-root user. In this case B<fuser> will report no access."
+msgstr "B<fuser> nu poate raporta niciun proces pentru care nu are permisiunea de a căuta în tabelul descriptor al fișierului. Cel mai frecvent caz în care apare această problemă este atunci când se caută socluri TCP sau UDP în timp ce B<fuser> rulează ca utilizator non-root. În acest caz, B<fuser> va raporta că nu există acces."
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid "Installing B<fuser> SUID root will avoid problems associated with partial information, but may be undesirable for security and privacy reasons."
+msgstr "Instalarea lui B<fuser> cu SUID root va evita problemele asociate cu informațiile parțiale, dar poate fi nedorită din motive de securitate și confidențialitate."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid "B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched with kernels older than 1.3.78."
+msgstr "Spațiile de nume B<udp> și B<tcp> și soclurile de domeniu UNIX nu pot fi căutate cu nuclee mai vechi de 1.3.78."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "Accesările de către nucleu sunt afișate doar cu opțiunea B<-v>."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid "The B<-k> option only works on processes. If the user is the kernel, B<fuser> will print an advice, but take no action beyond that."
+msgstr "Opțiunea B<-k> funcționează numai asupra proceselor. Dacă utilizatorul este nucleul, B<fuser> va afișa un sfat, dar nu va lua nicio măsură în afară de aceasta."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid "B<fuser> will not see block devices mounted by processes in a different mount namespace. This is due to the device ID shown in the process' file descriptor table being from the process namespace, not fuser's; meaning it won't match."
+msgstr "B<fuser> nu va vedea dispozitivele bloc montate de procese într-un spațiu de nume de montare diferit. Acest lucru se datorează faptului că ID-ul dispozitivului afișat în tabelul descriptor al fișierului procesului provine din spațiul de nume al procesului, nu din cel al «fuser»; adică nu se va potrivi."
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "ERORI"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid "B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, even if you don't have that device configured. There may be other devices it does this for too."
+msgstr "B<fuser -m /dev/sgX> va afișa (sau va ucide cu opțiuneal B<-k>) toate procesele, chiar dacă nu aveți acel dispozitiv configurat. Pot exista și alte dispozitive pentru care face acest lucru."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid "The mount B<-m> option will match any file within the same device as the specified file, use the B<-M> option as well if you mean to specify only the mount point."
+msgstr "Opțiunea de montare B<-m> se va potrivi cu orice fișier din același dispozitiv cu fișierul specificat, utilizați și opțiunea B<-M> dacă doriți să specificați doar punctul de montare."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid "B<fuser> will not match mapped files, such as a process' shared libraries if they are on a B<btrfs>(5) filesystem due to the device IDs being different for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr "B<fuser> nu va potrivi fișierele copiate în memorie, cum ar fi bibliotecile partajate ale unui proces, dacă acestea se află pe un sistem de fișiere B<btrfs>(5) din cauza faptului că ID-urile de dispozitiv sunt diferite pentru B<stat>(2) și I</proc/E<lt>PIDE<gt>/maps>."
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "CONSULTAȚI ȘI"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+msgid "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "2023-06-17"
+msgstr "17.06.2023"
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall - omoară procesele după nume"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid "B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<name> ..."
+msgstr "B<killall> [B<-Z>,B<\\ --context> I<model>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<DATÄ‚-ORÄ‚>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<SEMNAL>,\\ B<->I<SEMNAL>] [B<-u>,B<\\ --user> I<utilizator>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<DATÄ‚-ORÄ‚>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<nume> ..."
+
+#. type: Plain text
+#: ../doc/killall.1:41
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-l>, B<--list>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid "B<killall> sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent."
+msgstr "B<killall> trimite un semnal tuturor proceselor care rulează oricare dintre comenzile specificate. Dacă nu este specificat niciun nume de semnal, este trimis semnalul SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+msgid "Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr "Semnalele pot fi specificate fie prin nume (de exemplu, B<-HUP> sau B<-SIGHUP>), fie prin număr (de exemplu, B<-1>), fie prin opțiunea B<-s>."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid "If the command name is not regular expression (option B<-r>) and contains a slash (B</>), processes executing that particular file will be selected for killing, independent of their name."
+msgstr "Dacă numele comenzii nu este o expresie regulată (opțiunea B<-r>) și conține o bară oblică (B</>), procesele care execută acel fișier anume vor fi selectate pentru omorâre, independent de numele lor."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid "B<killall> returns a zero return code if at least one process has been killed for each listed command, or no commands were listed and at least one process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-zero otherwise."
+msgstr "B<killall> returnează un cod de returnare zero dacă cel puțin un proces a fost omorât pentru fiecare comandă listată sau nicio comandă nu a fost listată și cel puțin un proces se potrivește cu criteriile de căutare B<-u> și B<-Z>. B<killall> returnează un cod de returnare diferit de zero în caz contrar."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid "A B<killall> process never kills itself (but may kill other B<killall> processes)."
+msgstr "Un proces B<killall> nu se omoară niciodată pe el însuși (dar poate omorî alte procese B<killall>)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid "Require an exact match for very long names. If a command name is longer than 15 characters, the full name may be unavailable (i.e. it is swapped out). In this case, B<killall> will kill everything that matches within the first 15 characters. With B<-e>, such entries are skipped. B<killall> prints a message for each skipped entry if B<-v> is specified in addition to B<-e>."
+msgstr "Necesită o potrivire exactă pentru nume foarte lungi. Dacă un nume de comandă are mai mult de 15 caractere, este posibil ca numele complet să nu fie disponibil (adică se află în fiÈ™ierul de interschimb „swapâ€). ÃŽn acest caz, B<killall> va omorî tot ceea ce se potriveÈ™te cu primele 15 caractere. Cu B<-e>, astfel de intrări sunt sărite. B<killall> afiÈ™ează un mesaj pentru fiecare intrare omisă dacă opÈ›iunea B<-v> este specificată pe lângă opÈ›iunea B<-e>."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "Face ca operația de căutare a numelui procesului să nu țină seama de majuscule și minuscule."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid "Kill the process group to which the process belongs. The kill signal is only sent once per group, even if multiple processes belonging to the same process group were found."
+msgstr "Omoară grupul de procese din care face parte procesul. Semnalul de omorâre este trimis o singură dată pe grup, chiar dacă au fost găsite mai multe procese care aparțin aceluiași grup de procese."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "Solicită interactiv confirmarea înainte de a omorî."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid "Match against the PID namespace of the given PID. The default is to match against all namespaces."
+msgstr "Compară spațiul de nume PID cu PID-ul dat. Valoarea implicită este să se potrivească cu toate spațiile de nume."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid "Match only processes that are older (started before) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr "Caută numai procesele care sunt mai vechi (începute înainte) de timpul specificat. Timpul este specificat ca un număr zecimal urmat de o unitate. Unitățile sunt s,m,h,d,w,M,y pentru secunde, minute, ore, zile, săptămâni, luni și, respectiv, ani."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "Nu se plânge dacă niciun proces nu a fost omorât."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid "Interpret process name pattern as a POSIX extended regular expression, per B<regex>(3)."
+msgstr "Interpretează modelul de nume de proces ca o expresie regulată extinsă POSIX, conform B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<SEMNAL>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "Trimite acest semnal în loc de SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid "Kill only processes the specified user owns. Command names are optional."
+msgstr "Omoară numai procesele deținute de utilizatorul specificat. Numele comenzilor sunt opționale."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "Raportează dacă semnalul a fost trimis cu succes."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid "Wait for all killed processes to die. B<killall> checks once per second if any of the killed processes still exist and only returns if none are left. Note that B<killall> may wait forever if the signal was ignored, had no effect, or if the process stays in zombie state."
+msgstr "AÈ™teaptă ca toate procesele omorâte să moară. B<killall> verifică o dată pe secundă dacă există încă vreunul dintre procesele omorâte È™i returnează controlul numai atunci când nu mai sunt procese în listă. ReÈ›ineÈ›i că B<killall> poate aÈ™tepta pentru totdeauna dacă semnalul a fost ignorat, nu a avut niciun efect sau dacă procesul intră în starea „zombieâ€."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid "Match only processes that are younger (started after) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr "Caută numai procesele care sunt mai noi (începute după) de timpul specificat. Timpul este specificat ca un număr zecimal urmat de o unitate. Unitățile sunt s,m,h,d,w,M,y pentru secunde, minute, ore, zile, săptămâni, luni și, respectiv, an."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid "Specify security context: kill only processes having security context that match with given extended regular expression pattern. Must precede other arguments on the command line. Command names are optional."
+msgstr "Specifică contextul de securitate: omoară numai procesele care au un context de securitate care se potrivește cu modelul de expresie regulată extins dat. Trebuie să precedă alte argumente din linia de comandă. Numele comenzilor sunt opționale."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "ERORI CUNOSCUTE"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid "Killing by file only works for executables that are kept open during execution, i.e. impure executables can't be killed this way."
+msgstr "Omorârea prin fișier funcționează numai pentru executabilele care sunt menținute deschise în timpul execuției, adică executabilele impure nu pot fi omorâte în acest fel."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid "Be warned that typing B<killall> I<name> may not have the desired effect on non-Linux systems, especially when done by a privileged user."
+msgstr "Aveți grijă asupra faptului că tastarea B<killall> I<nume> poate să nu aibă efectul dorit asupra sistemelor non-Linux, mai ales când este făcută de un utilizator privilegiat."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid "B<killall -w> doesn't detect if a process disappears and is replaced by a new process with the same PID between scans."
+msgstr "B<killall -w> nu detectează dacă un proces dispare și este înlocuit cu un nou proces cu același PID între două scanări."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid "If processes change their name, B<killall> may not be able to match them correctly."
+msgstr "Dacă procesele își schimbă numele, este posibil ca B<killall> să nu le recunoască corect."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid "B<killall> has a limit of names that can be specified on the command line. This figure is the size of an unsigned long integer multiplied by 8. For most 32 bit systems the limit is 32 and similarly for a 64 bit system the limit is usually 64."
+msgstr "B<killall> are o limită de nume care pot fi specificate în linia de comandă. Această cifră are dimensiunea unui număr întreg lung fără semn înmulțit cu 8. Pentru majoritatea sistemelor pe 32 de biți limita este 32 și, în mod similar, pentru un sistem pe 64 de biți, limita este de obicei 64."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<regex>(3)."
+msgstr "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<expreg>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "01.12.2021"
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr "peekfd - examinează descriptorii de fișiere ai proceselor care rulează"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<pid> [I<descriptor_fișier>] [I<descriptor_fișier>] ..."
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid "B<peekfd> attaches to a running process and intercepts all reads and writes to file descriptors. You can specify the desired file descriptor numbers or dump all of them."
+msgstr "B<peekfd> se atașează la un proces care rulează și interceptează toate citirile și scrierile în descriptorii de fișiere. Puteți specifica numerele descriptorilor de fișiere pe care îi doriți sau îi puteți imprima pe toți."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr "Nu efectuează post-procesare asupra octeților citiți sau scriși."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr "Nu afișează anteturi care indică sursa octeților descărcați."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid "Also dump the requested file descriptor activity in any new child processes that are created."
+msgstr "Afișează de asemenea, activitatea descriptorului de fișier solicitat în orice proces-copil nou creat."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid "Remove duplicate read/writes from the output. If you're looking at a tty with echo, you might want this."
+msgstr "Elimină citirile/scrierile duplicate de la ieșire. Dacă vizualizați date într-un terminal cu ieșire repetată, această opțiune este probabil să vă fie utilă."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "Afișează informațiile despre versiune."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "Afișează un mesaj de ajutor."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid "Not used but useful for the user to look at to get good file descriptor numbers."
+msgstr "Nu este folosit, dar este util pentru utilizator pentru a obține un număr bun de descriptoare de fișiere."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "MEDIU"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "Nimic."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTICE"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr "Următoarele diagnostice pot fi emise la ieșirea de eroare standard:"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Eroare la atașarea la pid >I<E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid "An unknown error occurred while attempted to attach to a process, you may need to be root."
+msgstr "A apărut o eroare necunoscută în timpul încercării de atașare la un proces, poate că trebuie să fiți root."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid "Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr "Probabil multe. Nu fiți surprins dacă procesul pe care îl monitorizați moare."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "AUTOR"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "09.09.2020"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "Linux\""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "Manualul utilizatorului Linux"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog - raportează ruta curentă a jurnalelor unui proces"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<pid> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr "Comanda B<pslog> raportează jurnalele de lucru curente ale unui proces."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid "Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr "Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> a scris B<pslog> în 2015. Trimiteți rapoartele de erori la E<.MT mulevito@gmail.com> E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat - afișează statisticile unui proces"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid "B<prtstat> prints the statistics of the specified process. This information comes from the B</proc/>I<pid>B</stat> file."
+msgstr "B<prtstat> afișează statistici ale procesului specificat. Aceste informații provin din fișierul B</proc/>I<pid>B</stat>."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "Afișează informațiile în format brut."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "Afișează informațiile despre versiune pentru B<prtstat>."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<pid>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "sursa informațiilor pe care o folosește B<prtstat>."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "21.06.2021"
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree - afișează un arbore de procese"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<utilizator>]"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid "B<pstree> shows running processes as a tree. The tree is rooted at either I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all process trees rooted at processes owned by that user are shown."
+msgstr "B<pstree> arată procesele care rulează sub formă de arbore. Arborele este înrădăcinat fie la I<pid>, fie la B<init> dacă I<pid> este omis. Dacă este specificat un nume de utilizator, sunt afișați toți arborii de proces cu rădăcină la procesele deținute de acel utilizator."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid "B<pstree> visually merges identical branches by putting them in square brackets and prefixing them with the repetition count, e.g."
+msgstr "B<pstree> îmbină vizual ramuri identice punându-le între paranteze drepte și prefixându-le cu numărul de repetiții, de exemplu:"
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "devine"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid "Child threads of a process are found under the parent process and are shown with the process name in curly braces, e.g."
+msgstr "Firele secundare ale unui proces sunt găsite sub procesul părinte și sunt afișate cu numele procesului în acolade, de exemplu:"
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid "If B<pstree> is called as B<pstree.x11> then it will prompt the user at the end of the line to press return and will not return until that has happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr "Dacă B<pstree> este apelat ca B<pstree.x11>, atunci acesta va solicita utilizatorului să apese «Enter» la sfârșitul liniei și nu returnează controlul până când nu se va întâmpla acest lucru. Acest lucru este util atunci când B<pstree> este rulat într-un xterminal."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid "Certain kernel or mount parameters, such as the I<hidepid> option for procfs, will hide information for some processes. In these situations B<pstree> will attempt to build the tree without this information, showing process names as question marks."
+msgstr "Anumiți parametri de nucleu sau de montare, cum ar fi opțiunea I<hidepid> pentru «procfs», vor ascunde informațiile pentru unele procese. În aceste situații, B<pstree> va încerca să construiască arborele fără aceste informații, arătând numele proceselor ca semne de întrebare."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid "Show command line arguments. If the command line of a process is swapped out, that process is shown in parentheses. B<-a> implicitly disables compaction for processes but not threads."
+msgstr "Afișează argumentele liniei de comandă. Dacă linia de comandă a unui proces este schimbată, acel proces este afișat în paranteze. B<-a> dezactivează implicit compactarea pentru procese, dar nu pentru fire."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "Utilizează caractere ASCII pentru a desena arborele."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid "Disable compaction of identical subtrees. By default, subtrees are compacted whenever possible."
+msgstr "Dezactivează compactarea subarborilor identici. În mod implicit, subarborii sunt compactați ori de câte ori este posibil."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid "Color the process name by given attribute. Currently B<pstree> only accepts the value B<age> which colors by process age. Processes newer than 60 seconds are green, newer than an hour yellow and the remaining red."
+msgstr "Colorează numele procesului după atributul dat. În prezent, B<pstree> acceptă doar valoarea B<age> care colorează după vârsta procesului. Procesele mai noi de 60 de secunde sunt verzi, mai noi de o oră galbene și cele rămase roșii."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid "Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses after each process name. If both PIDs and PGIDs are displayed then PIDs are shown first."
+msgstr "Afișează PGID-urile. ID-urile grupurilor de procese sunt afișate ca numere zecimale în paranteze după fiecare nume de proces. Dacă sunt afișate atât PID-urile, cât și PGID-urile, atunci PID-urile sunt afișate mai întâi."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "Utilizează caractere VT100 pentru a desena linii."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid "Highlight the current process and its ancestors. This is a no-op if the terminal doesn't support highlighting or if neither the current process nor any of its ancestors are in the subtree being shown."
+msgstr "Evidențiază procesul actual și „strămoșii†săi. Această opțiune nu face nimic dacă terminalul nu acceptă evidențierea sau dacă nici procesul curent, nici vreunul dintre „strămoșii†săi nu se află în subarborele care este afișat."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid "Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr "Ca B<-h>, dar evidențiază procesul specificat în schimb. Spre deosebire de B<-h>, B<pstree> eșuează când se folosește B<-H> dacă evidențierea nu este disponibilă."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid "Display long lines. By default, lines are truncated to either the COLUMNS environment variable or the display width. If neither of these methods work, the default of 132 columns is used."
+msgstr "Afișează linii lungi. În mod implicit, liniile sunt trunchiate fie la variabila de mediu COLUMNS, fie la lățimea afișajului. Dacă niciuna dintre aceste metode nu funcționează, se folosește valoarea implicită de 132 de coloane."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid "Sort processes with the same parent by PID instead of by name. (Numeric sort.)"
+msgstr "Sortează procesele cu același părinte după PID și nu după nume (sortare numerică)."
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid "Show individual trees for each namespace of the type specified. The available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Regular users don't have access to other users' processes information, so the output will be limited."
+msgstr "Afișează arbori individuali pentru fiecare spațiu de nume de tipul specificat. Tipurile disponibile sunt: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Utilizatorii obișnuiți nu au acces la informațiile despre procesele altor utilizatori, astfel încât rezultatul va fi limitat."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid "Show PIDs. PIDs are shown as decimal numbers in parentheses after each process name. B<-p> implicitly disables compaction."
+msgstr "Afișează PID-urile. PID-urile sunt afișate ca numere zecimale între paranteze după fiecare nume de proces. B<-p> dezactivează implicit compactarea."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "Afișează procesele părinte ale procesului specificat."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid "Show namespaces transitions. Like B<-N>, the output is limited when running as a regular user."
+msgstr "Afișează tranzițiile de spații de nume. La fel ca opțiunea B<-N>, ieșirea este limitată atunci când rulează ca utilizator obișnuit."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "Afișează numele complete pentru firele de execuție atunci când sunt disponibile."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "Ascunde firele de execuție și arată numai procesele."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid "Show uid transitions. Whenever the uid of a process differs from the uid of its parent, the new uid is shown in parentheses after the process name."
+msgstr "Afișează tranzițiile uid. Ori de câte ori uid-ul unui proces diferă de uid-ul părintelui său, noul uid este afișat în paranteze după numele procesului."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid "Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with B<echo -e '\\033%@'>."
+msgstr "Utilizează caractere UTF-8 (Unicode) pentru desenul liniilor. Sub Linux 1.1-54 și versiuni ulterioare, consola intră în modul UTF-8 cu B<echo -e '\\033%8'> și iese cu B<echo -e '\\033%@'>."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid "Show the current security attributes of the process. For SELinux systems this will be the security context."
+msgstr "Afișează atributele de securitate curente ale procesului. Pentru sistemele SELinux acesta va fi contextul de securitate."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "Unele seturi de caractere pot fi incompatibile cu caracterele VT100."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
+
+#, no-wrap
+#~ msgid "2021-01-11"
+#~ msgstr "11.01.2021"
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
+
+#~ msgid "B<->"
+#~ msgstr "B<->"
+
+#~ msgid "Reset all options and set the signal back to SIGKILL."
+#~ msgstr "Restabilește toate opțiunile și stabilește semnalul din nou la SIGKILL."
diff --git a/man-po/ro/fuser.1 b/man-po/ro/fuser.1
new file mode 100644
index 0000000..361e58c
--- /dev/null
+++ b/man-po/ro/fuser.1
@@ -0,0 +1,232 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 02.11.2022 psmisc "Comenzi pentru utilizator"
+.SH NUME
+fuser \- identifică procesele care utilizează fișiere sau socluri
+.SH REZUMAT
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP
+\fIspațiu_nume\fP] [\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fISEMNAL\fP] ] \fInume\fP
+\&...
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH DESCRIERE
+\fBfuser\fP afișează PID\-urile proceselor care utilizează fișierele sau
+sistemele de fișiere specificate. În modul de afișare implicit, fiecare nume
+de fișier este urmat de o literă care indică tipul de acces:
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+directorul curent.
+.TP
+\fBe\fP
+executabil în curs de executare.
+.TP
+\fBf\fP
+fișier deschis.. \fBf\fP este omis în modul de afișare implicit.
+.TP
+\fBF\fP
+fișier deschis pentru scriere. \fBF\fP este omis în modul de afișare implicit.
+.TP
+\fBr\fP
+directorul rădăcină.
+.TP
+\fBm\fP
+fișier alocat cu «mmap» sau bibliotecă partajată.
+.TP
+\&\fB.\fP
+Substituent, omis în modul de afișare implicit.
+.PD
+.RE
+.LP
+\fBfuser\fP returnează un cod de returnare diferit de zero dacă niciunul dintre
+fișierele specificate nu este accesat sau în cazul unei erori fatale. Dacă a
+fost găsit cel puțin un fișier accesat, \fBfuser\fP returnează zero.
+.PP
+Pentru a căuta procese folosind socluri TCP și UDP, spațiul de nume
+corespunzător trebuie să fie selectat cu opțiunea \fB\-n\fP. În mod implicit,
+\fBfuser\fP va căuta atât în soclurile IPv6, cât și în soclurile IPv4. Pentru a
+modifica comportamentul implicit, utilizați opțiunile \fB\-4\fP și
+\fB\-6\fP. Soclurile pot fi specificate prin portul local și de la distanță și
+prin adresa de la distanță. Toate câmpurile sunt opționale, dar virgulele
+din fața câmpurilor lipsă trebuie să fie prezente:
+.PP
+[\fIport_local\fP][,[\fIgazdă_rmt\fP][,[\fIport_rmt\fP]]] notă: rmt = la
+distanță(remote)
+.PP
+Puteți utiliza fie valori simbolice, fie valori numerice pentru adresele IP
+și numerele de porturi.
+.PP
+\fBfuser\fP afișează doar PID\-urile la ieșirea standard, orice altceva este
+trimis către ieșirea de eroare standard.
+.SH OPÈšIUNI
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+Afișează toate fișierele specificate în linia de comandă. În mod implicit,
+sunt afișate doar fișierele care sunt accesate de cel puțin un proces.
+.TP
+\fB\-c\fP
+La fel ca și opțiunea \fB\-m\fP, utilizată pentru compatibilitatea cu POSIX.
+.TP
+\fB\-f\fP
+Ignorată în tăcere, utilizată pentru compatibilitatea cu POSIX.
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+Omoară procesele care accesează fișierul. Cu excepția cazului în care este
+schimbat cu opțiunea \fB\-\fP\fISIGNAL\/\fP, semnalul SIGKILL este semnalul trimis
+procesului. Un proces \fBfuser\fP nu se omoară pe el însuși niciodată, dar
+poate omorî alte procese \fBfuser\fP. ID\-ul de utilizator efectiv al procesului
+care execută \fBfuser\fP este reamplasat cu ID\-ul de utilizator real înainte de
+a încerca să ucidă.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+Cere utilizatorului confirmarea înainte de a omorî un proces. Această
+opțiune este ignorată în tăcere dacă opțiunea \fB\-k\fP nu este deasemeni
+prezentă.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+Pentru spațiul de nume \fBfișier\fP, toate comparațiile trebuie să se bazeze pe
+nodul\-i al fișierelor specificate și niciodată pe numele fișierelor, chiar
+și pe sistemele de fișiere bazate pe rețea.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+Listează toate numele semnalelor cunoscute.
+.TP
+\fB\-m\fP\fI NUME\fP, \fB\-\-mount \fP\fINUME\fP
+\fINUME\fP specifică un fișier pe un sistem de fișiere montat sau un dispozitiv
+bloc care este montat. Sunt listate toate procesele care accesează fișierele
+din acel sistem de fișiere. Dacă este specificat un director, acesta este
+schimbat automat în \fINUME\fP/ pentru a utiliza orice sistem de fișiere care
+ar putea fi montat pe acel director.
+.TP
+\fB\-M\fP, \fB\-\-ismountpoint\fP
+Solicitarea va fi îndeplinită numai dacă \fINUME\fP specifică un punct de
+montare. Aceasta este o centură de siguranță neprețuită care vă împiedică să
+ucideți mașina dacă \fINUME\fP se întâmplă să nu fie un sistem de fișiere.
+.TP
+\fB\-w\fP
+Omoară numai procesele care au acces de scriere. Această opțiune este
+ignorată în tăcere dacă opțiunea \fB\-k\fP nu este deasemeni prezentă.
+.TP
+\fB\-n\fP\fI SPAÈšIU_NUME\fP, \fB\-\-namespace \fP\fI SPAÈšIU_NUME\fP
+Selectează un alt spațiu de nume. Sunt acceptate spațiile de nume \fBfișier\fP
+(nume de fișiere, implicit), \fBudp\fP (porturi UDP locale) și \fBtcp\fP (porturi
+TCP locale). Pentru porturi, poate fi specificat fie numărul portului, fie
+numele simbolic. Dacă nu există ambiguitate, poate fi folosită notația
+scurtă \fInume\fP\fB/\fP\fIspațiu\fP (de exemplu, \fI80\fP\fB/\fP\fItcp\fP).
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+Funcționare silențioasă. Opțiunile \fB\-u\fP și \fB\-v\fP sunt ignorate în acest
+mod. Opțiunea \fB\-a\fP nu trebuie să fie utilizată cu opțiunea \fB\-s\fP.
+.TP
+\fB\-\fP\fISEMNAL\fP
+Utilizează semnalul specificat în loc de SIGKILL atunci când omoară
+procesele. Semnalele pot fi specificate fie după nume (de exemplu, \fB\-HUP\fP),
+fie după număr (de exemplu, \fB\-1\fP). Această opțiune este ignorată în tăcere
+dacă nu este utilizată opțiunea \fB\-k\fP.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+Adaugă numele de utilizator al proprietarului procesului la fiecare PID.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+Modul informație\-detaliată. Procesele sunt afișate într\-un stil asemănător
+comenzii \fBps\fP. Câmpurile PID, UTILIZATOR și COMANDĂ sunt similare cu cele
+ale \fBps\fP. ACCES arată modul în care procesul accesează fișierul. Modul
+informație\-detaliată va afișa, de asemenea, când un anumit fișier este
+accesat ca punct de montare, export knfs sau fișier de spațiu de interschimb
+„swapâ€. ÃŽn acest caz, \fBnucleul\fP este afiÈ™at în loc de PID.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Afișează informațiile despre versiune.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+Caută doar socluri IPv4. Această opțiune nu trebuie utilizată cu opțiunea
+\fB\-6\fP și are efect doar cu spațiile de nume tcp și udp.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+Caută doar socluri IPv6. Această opțiune nu trebuie utilizată cu opțiunea
+\fB\-4\fP și are efect doar cu spațiile de nume tcp și udp.
+.SH FIȘIERE
+.TP
+/proc
+locația sistemului de fișiere proc
+.SH EXEMPLE
+.TP
+\fBfuser \-km /home\fP
+omoară toate procesele care accesează sistemul de fișiere „/home†în orice
+fel (citire, scriere, creare, .. etc.).
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fIcomanda\fP\fB; fi\fP
+invocă \fIcomanda\fP dacă niciun alt proces nu utilizează /dev/ttyS1.
+.TP
+\fBfuser telnet/tcp\fP
+afișează toate procesele de la portul (local) TELNET.
+.SH RESTRICÈšII
+Procesele care accesează același fișier sau sistem de fișiere de mai multe
+ori în același mod sunt afișate o singură dată.
+.PP
+Dacă același obiect este specificat de mai multe ori în linia de comandă,
+unele dintre aceste intrări pot fi ignorate.
+.PP
+\fBfuser\fP poate obține doar informații parțiale, cu excepția cazului în care
+rulează cu privilegii. În consecință, fișierele deschise de procese
+aparținând altor utilizatori pot să nu fie listate și executabilele pot să
+fie clasificate doar ca asociate cu fișierul.
+.PP
+\fBfuser\fP nu poate raporta niciun proces pentru care nu are permisiunea de a
+căuta în tabelul descriptor al fișierului. Cel mai frecvent caz în care
+apare această problemă este atunci când se caută socluri TCP sau UDP în timp
+ce \fBfuser\fP rulează ca utilizator non\-root. În acest caz, \fBfuser\fP va
+raporta că nu există acces.
+.PP
+Instalarea lui \fBfuser\fP cu SUID root va evita problemele asociate cu
+informațiile parțiale, dar poate fi nedorită din motive de securitate și
+confidențialitate.
+.PP
+Spațiile de nume \fBudp\fP și \fBtcp\fP și soclurile de domeniu UNIX nu pot fi
+căutate cu nuclee mai vechi de 1.3.78.
+.PP
+Accesările de către nucleu sunt afișate doar cu opțiunea \fB\-v\fP.
+.PP
+Opțiunea \fB\-k\fP funcționează numai asupra proceselor. Dacă utilizatorul este
+nucleul, \fBfuser\fP va afișa un sfat, dar nu va lua nicio măsură în afară de
+aceasta.
+.PP
+\fBfuser\fP nu va vedea dispozitivele bloc montate de procese într\-un spațiu de
+nume de montare diferit. Acest lucru se datorează faptului că ID\-ul
+dispozitivului afișat în tabelul descriptor al fișierului procesului provine
+din spațiul de nume al procesului, nu din cel al «fuser»; adică nu se va
+potrivi.
+.SH ERORI
+.PP
+\fBfuser \-m /dev/sgX\fP va afișa (sau va ucide cu opțiuneal \fB\-k\fP) toate
+procesele, chiar dacă nu aveți acel dispozitiv configurat. Pot exista și
+alte dispozitive pentru care face acest lucru.
+.PP
+Opțiunea de montare \fB\-m\fP se va potrivi cu orice fișier din același
+dispozitiv cu fișierul specificat, utilizați și opțiunea \fB\-M\fP dacă doriți
+să specificați doar punctul de montare.
+.PP
+\fBfuser\fP nu va potrivi fișierele copiate în memorie, cum ar fi bibliotecile
+partajate ale unui proces, dacă acestea se află pe un sistem de fișiere
+\fBbtrfs\fP(5) din cauza faptului că ID\-urile de dispozitiv sunt diferite
+pentru \fBstat\fP(2) și \fI/proc/<PID>/maps\fP.
+.SH "CONSULTAȚI ȘI"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/ro/killall.1 b/man-po/ro/killall.1
new file mode 100644
index 0000000..d4567f0
--- /dev/null
+++ b/man-po/ro/killall.1
@@ -0,0 +1,130 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH KILLALL 1 17.06.2023 psmisc "Comenzi pentru utilizator"
+.SH NUME
+killall \- omoară procesele după nume
+.SH REZUMAT
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fImodel\fP] [\fB\-e\fP,\fB\ \-\-exact\fP] [\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP \fIPID\fP]
+[\fB\-o\fP,\fB\ \-\-older\-than\fP \fIDATÄ‚\-ORÄ‚\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP] [\fB\-r\fP,\fB\ \-\-regexp\fP] [\fB\-s\fP,\fB\ \-\-signal\fP \fISEMNAL\fP,\ \fB\-\fP\fISEMNAL\fP] [\fB\-u\fP,\fB\ \-\-user\fP \fIutilizator\fP] [\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP] [\fB\-y\fP,\fB\ \-\-younger\-than\fP \fIDATÄ‚\-ORÄ‚\fP] [\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\fB\ \-\-version\fP] [\fB\-\-\fP] \fInume\fP ...
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH DESCRIERE
+\fBkillall\fP trimite un semnal tuturor proceselor care rulează oricare dintre
+comenzile specificate. Dacă nu este specificat niciun nume de semnal, este
+trimis semnalul SIGTERM.
+.PP
+Semnalele pot fi specificate fie prin nume (de exemplu, \fB\-HUP\fP sau
+\fB\-SIGHUP\fP), fie prin număr (de exemplu, \fB\-1\fP), fie prin opțiunea \fB\-s\fP.
+.PP
+Dacă numele comenzii nu este o expresie regulată (opțiunea \fB\-r\fP) și conține
+o bară oblică (\fB/\fP), procesele care execută acel fișier anume vor fi
+selectate pentru omorâre, independent de numele lor.
+.PP
+\fBkillall\fP returnează un cod de returnare zero dacă cel puțin un proces a
+fost omorât pentru fiecare comandă listată sau nicio comandă nu a fost
+listată și cel puțin un proces se potrivește cu criteriile de căutare \fB\-u\fP
+și \fB\-Z\fP. \fBkillall\fP returnează un cod de returnare diferit de zero în caz
+contrar.
+.PP
+Un proces \fBkillall\fP nu se omoară niciodată pe el însuși (dar poate omorî
+alte procese \fBkillall\fP).
+.SH OPÈšIUNI
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+Necesită o potrivire exactă pentru nume foarte lungi. Dacă un nume de
+comandă are mai mult de 15 caractere, este posibil ca numele complet să nu
+fie disponibil (adică se află în fiÈ™ierul de interschimb „swapâ€). ÃŽn acest
+caz, \fBkillall\fP va omorî tot ceea ce se potrivește cu primele 15
+caractere. Cu \fB\-e\fP, astfel de intrări sunt sărite. \fBkillall\fP afișează un
+mesaj pentru fiecare intrare omisă dacă opțiunea \fB\-v\fP este specificată pe
+lângă opțiunea \fB\-e\fP.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+Face ca operația de căutare a numelui procesului să nu țină seama de
+majuscule și minuscule.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+Omoară grupul de procese din care face parte procesul. Semnalul de omorâre
+este trimis o singură dată pe grup, chiar dacă au fost găsite mai multe
+procese care aparțin aceluiași grup de procese.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+Solicită interactiv confirmarea înainte de a omorî.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+Listează toate numele semnalelor cunoscute.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+Compară spațiul de nume PID cu PID\-ul dat. Valoarea implicită este să se
+potrivească cu toate spațiile de nume.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+Caută numai procesele care sunt mai vechi (începute înainte) de timpul
+specificat. Timpul este specificat ca un număr zecimal urmat de o
+unitate. Unitățile sunt s,m,h,d,w,M,y pentru secunde, minute, ore, zile,
+săptămâni, luni și, respectiv, ani.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+Nu se plânge dacă niciun proces nu a fost omorât.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+Interpretează modelul de nume de proces ca o expresie regulată extinsă
+POSIX, conform \fBregex\fP(3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fISEMNAL\fP"
+Trimite acest semnal în loc de SIGTERM.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+Omoară numai procesele deținute de utilizatorul specificat. Numele
+comenzilor sunt opționale.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+Raportează dacă semnalul a fost trimis cu succes.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+Afișează informațiile despre versiune.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+Așteaptă ca toate procesele omorâte să moară. \fBkillall\fP verifică o dată pe
+secundă dacă există încă vreunul dintre procesele omorâte și returnează
+controlul numai atunci când nu mai sunt procese în listă. Rețineți că
+\fBkillall\fP poate aștepta pentru totdeauna dacă semnalul a fost ignorat, nu a
+avut niciun efect sau dacă procesul intră în starea „zombieâ€.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+Caută numai procesele care sunt mai noi (începute după) de timpul
+specificat. Timpul este specificat ca un număr zecimal urmat de o
+unitate. Unitățile sunt s,m,h,d,w,M,y pentru secunde, minute, ore, zile,
+săptămâni, luni și, respectiv, an.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+Specifică contextul de securitate: omoară numai procesele care au un context
+de securitate care se potrivește cu modelul de expresie regulată extins
+dat. Trebuie să precedă alte argumente din linia de comandă. Numele
+comenzilor sunt opționale.
+.SH FIȘIERE
+.TP
+/proc
+locația sistemului de fișiere proc
+.SH "ERORI CUNOSCUTE"
+Omorârea prin fișier funcționează numai pentru executabilele care sunt
+menținute deschise în timpul execuției, adică executabilele impure nu pot fi
+omorâte în acest fel.
+.PP
+Aveți grijă asupra faptului că tastarea \fBkillall\fP \fInume\fP poate să nu aibă
+efectul dorit asupra sistemelor non\-Linux, mai ales când este făcută de un
+utilizator privilegiat.
+.PP
+\fBkillall \-w\fP nu detectează dacă un proces dispare și este înlocuit cu un
+nou proces cu același PID între două scanări.
+.PP
+Dacă procesele își schimbă numele, este posibil ca \fBkillall\fP să nu le
+recunoască corect.
+.PP
+\fBkillall\fP are o limită de nume care pot fi specificate în linia de
+comandă. Această cifră are dimensiunea unui număr întreg lung fără semn
+înmulțit cu 8. Pentru majoritatea sistemelor pe 32 de biți limita este 32
+și, în mod similar, pentru un sistem pe 64 de biți, limita este de obicei
+64.
+.SH "CONSULTAȚI ȘI"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBexpreg\fP(3).
diff --git a/man-po/ro/peekfd.1 b/man-po/ro/peekfd.1
new file mode 100644
index 0000000..785f3ed
--- /dev/null
+++ b/man-po/ro/peekfd.1
@@ -0,0 +1,62 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 01.12.2021 psmisc "Comenzi pentru utilizator"
+.SH NUME
+peekfd \- examinează descriptorii de fișiere ai proceselor care rulează
+.SH REZUMAT
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-c\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIpid\fP [\fIdescriptor_fișier\fP] [\fIdescriptor_fișier\fP] ...
+.SH DESCRIERE
+\fBpeekfd\fP se atașează la un proces care rulează și interceptează toate
+citirile și scrierile în descriptorii de fișiere. Puteți specifica numerele
+descriptorilor de fișiere pe care îi doriți sau îi puteți imprima pe toți.
+.SH OPÈšIUNI
+.IP \-8
+Nu efectuează post\-procesare asupra octeților citiți sau scriși.
+.IP \-n
+Nu afișează anteturi care indică sursa octeților descărcați.
+.IP \-c
+Afișează de asemenea, activitatea descriptorului de fișier solicitat în
+orice proces\-copil nou creat.
+.IP \-d
+Elimină citirile/scrierile duplicate de la ieșire. Dacă vizualizați date
+într\-un terminal cu ieșire repetată, această opțiune este probabil să vă fie
+utilă.
+.IP \-v
+Afișează informațiile despre versiune.
+.IP \-h
+Afișează un mesaj de ajutor.
+.SH FIȘIERE
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+Nu este folosit, dar este util pentru utilizator pentru a obține un număr
+bun de descriptoare de fișiere.
+.SH MEDIU
+Nimic.
+.SH DIAGNOSTICE
+Următoarele diagnostice pot fi emise la ieșirea de eroare standard:
+.TP
+\fBEroare la atașarea la pid \fP\fI<PID>\fP
+A apărut o eroare necunoscută în timpul încercării de atașare la un proces,
+poate că trebuie să fiți root.
+.SH ERORI
+Probabil multe. Nu fiți surprins dacă procesul pe care îl monitorizați
+moare.
+.SH AUTOR
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "CONSULTAȚI ȘI"
+\fBttysnoop\fP(8)
diff --git a/man-po/ro/prtstat.1 b/man-po/ro/prtstat.1
new file mode 100644
index 0000000..d6e71b3
--- /dev/null
+++ b/man-po/ro/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 09.09.2020 psmisc "Comenzi pentru utilizator"
+.SH NUME
+prtstat \- afișează statisticile unui proces
+.SH REZUMAT
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH DESCRIERE
+\fBprtstat\fP afișează statistici ale procesului specificat. Aceste informații
+provin din fișierul \fB/proc/\fP\fIpid\fP\fB/stat\fP.
+.SH OPÈšIUNI
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+Afișează informațiile în format brut.
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+Afișează informațiile despre versiune pentru \fBprtstat\fP.
+.SH FIȘIERE
+.TP
+\fB/proc/\fP\fIpid\fP\fB/stat\fP
+sursa informațiilor pe care o folosește \fBprtstat\fP.
diff --git a/man-po/ro/pslog.1 b/man-po/ro/pslog.1
new file mode 100644
index 0000000..3200e21
--- /dev/null
+++ b/man-po/ro/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 09.09.2020 Linux\(dq "Manualul utilizatorului Linux"
+.SH NUME
+pslog \- raportează ruta curentă a jurnalelor unui proces
+.SH REZUMAT
+.ad l
+\fBpslog\fP \fIpid\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH DESCRIERE
+Comanda \fBpslog\fP raportează jurnalele de lucru curente ale unui proces.
+.SH OPÈšIUNI
+.TP
+\fB\-V\fP
+Afișează informațiile despre versiune.
+.SH "CONSULTAȚI ȘI"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH AUTOR
+Vito Mule\(cq
+.MT mulevito@gmail.com
+.ME
+a scris \fBpslog\fP în
+2015. Trimiteți rapoartele de erori la
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/ro/pstree.1 b/man-po/ro/pstree.1
new file mode 100644
index 0000000..5d32e32
--- /dev/null
+++ b/man-po/ro/pstree.1
@@ -0,0 +1,144 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 21.06.2021 psmisc "Comenzi pentru utilizator"
+.SH NUME
+pstree \- afișează un arbore de procese
+.SH REZUMAT
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIattr\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fI\ pid\fP,\fB\ \-\-highlight\-pid\ \fP\fIpid\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fIns\fP] [\fB\-p\fP,\fB\ \-\-show\-pids\fP]
+[\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP] [\fB\-u\fP,\fB\ \-\-uid\-changes\fP]
+[\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIpid\fP,\fB\ \fP\fIutilizator\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH DESCRIERE
+\fBpstree\fP arată procesele care rulează sub formă de arbore. Arborele este
+înrădăcinat fie la \fIpid\fP, fie la \fBinit\fP dacă \fIpid\fP este omis. Dacă este
+specificat un nume de utilizator, sunt afișați toți arborii de proces cu
+rădăcină la procesele deținute de acel utilizator.
+.PP
+\fBpstree\fP îmbină vizual ramuri identice punându\-le între paranteze drepte și
+prefixându\-le cu numărul de repetiții, de exemplu:
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+devine
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+Firele secundare ale unui proces sunt găsite sub procesul părinte și sunt
+afișate cu numele procesului în acolade, de exemplu:
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+Dacă \fBpstree\fP este apelat ca \fBpstree.x11\fP, atunci acesta va solicita
+utilizatorului să apese «Enter» la sfârșitul liniei și nu returnează
+controlul până când nu se va întâmpla acest lucru. Acest lucru este util
+atunci când \fBpstree\fP este rulat într\-un xterminal.
+.PP
+Anumiți parametri de nucleu sau de montare, cum ar fi opțiunea \fIhidepid\fP
+pentru «procfs», vor ascunde informațiile pentru unele procese. În aceste
+situații, \fBpstree\fP va încerca să construiască arborele fără aceste
+informații, arătând numele proceselor ca semne de întrebare.
+
+.SH OPÈšIUNI
+.IP \fB\-a\fP
+Afișează argumentele liniei de comandă. Dacă linia de comandă a unui proces
+este schimbată, acel proces este afișat în paranteze. \fB\-a\fP dezactivează
+implicit compactarea pentru procese, dar nu pentru fire.
+.IP \fB\-A\fP
+Utilizează caractere ASCII pentru a desena arborele.
+.IP \fB\-c\fP
+Dezactivează compactarea subarborilor identici. În mod implicit, subarborii
+sunt compactați ori de câte ori este posibil.
+.IP \fB\-C\fP
+Colorează numele procesului după atributul dat. În prezent, \fBpstree\fP
+acceptă doar valoarea \fBage\fP care colorează după vârsta
+procesului. Procesele mai noi de 60 de secunde sunt verzi, mai noi de o oră
+galbene și cele rămase roșii.
+.IP \fB\-g\fP
+Afișează PGID\-urile. ID\-urile grupurilor de procese sunt afișate ca numere
+zecimale în paranteze după fiecare nume de proces. Dacă sunt afișate atât
+PID\-urile, cât și PGID\-urile, atunci PID\-urile sunt afișate mai întâi.
+.IP \fB\-G\fP
+Utilizează caractere VT100 pentru a desena linii.
+.IP \fB\-h\fP
+Evidențiază procesul actual și „strămoșii†săi. Această opțiune nu face
+nimic dacă terminalul nu acceptă evidențierea sau dacă nici procesul curent,
+nici vreunul dintre „strămoșii†săi nu se află în subarborele care este
+afișat.
+.IP \fB\-H\fP
+Ca \fB\-h\fP, dar evidențiază procesul specificat în schimb. Spre deosebire de
+\fB\-h\fP, \fBpstree\fP eșuează când se folosește \fB\-H\fP dacă evidențierea nu este
+disponibilă.
+.IP \fB\-l\fP
+Afișează linii lungi. În mod implicit, liniile sunt trunchiate fie la
+variabila de mediu COLUMNS, fie la lățimea afișajului. Dacă niciuna dintre
+aceste metode nu funcționează, se folosește valoarea implicită de 132 de
+coloane.
+.IP \fB\-n\fP
+Sortează procesele cu același părinte după PID și nu după nume (sortare
+numerică).
+.IP \fB\-N\fP
+Afișează arbori individuali pentru fiecare spațiu de nume de tipul
+specificat. Tipurile disponibile sunt: \fIipc\fP, \fImnt\fP, \fInet\fP, \fIpid\fP,
+\fItime\fP, \fIuser\fP, \fIuts\fP. Utilizatorii obișnuiți nu au acces la informațiile
+despre procesele altor utilizatori, astfel încât rezultatul va fi limitat.
+.IP \fB\-p\fP
+Afișează PID\-urile. PID\-urile sunt afișate ca numere zecimale între
+paranteze după fiecare nume de proces. \fB\-p\fP dezactivează implicit
+compactarea.
+.IP \fB\-s\fP
+Afișează procesele părinte ale procesului specificat.
+.IP \fB\-S\fP
+Afișează tranzițiile de spații de nume. La fel ca opțiunea \fB\-N\fP, ieșirea
+este limitată atunci când rulează ca utilizator obișnuit.
+.IP \fB\-t\fP
+Afișează numele complete pentru firele de execuție atunci când sunt
+disponibile.
+.IP \fB\-T\fP
+Ascunde firele de execuție și arată numai procesele.
+.IP \fB\-u\fP
+Afișează tranzițiile uid. Ori de câte ori uid\-ul unui proces diferă de
+uid\-ul părintelui său, noul uid este afișat în paranteze după numele
+procesului.
+.IP \fB\-U\fP
+Utilizează caractere UTF\-8 (Unicode) pentru desenul liniilor. Sub Linux
+1.1\-54 și versiuni ulterioare, consola intră în modul UTF\-8 cu \fBecho \-e \&'\033%8'\fP și iese cu \fBecho \-e '\033%@'\fP.
+.IP \fB\-V\fP
+Afișează informațiile despre versiune.
+.IP \fB\-Z\fP
+Afișează atributele de securitate curente ale procesului. Pentru sistemele
+SELinux acesta va fi contextul de securitate.
+.SH FIȘIERE
+.TP
+/proc
+locația sistemului de fișiere proc
+.SH ERORI
+Unele seturi de caractere pot fi incompatibile cu caracterele VT100.
+.SH "CONSULTAȚI ȘI"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/man-po/ru.po b/man-po/ru.po
new file mode 100644
index 0000000..2b4d165
--- /dev/null
+++ b/man-po/ru.po
@@ -0,0 +1,1847 @@
+# Russian translations for psmisc-man package
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Copyright © of this file:
+# Yuri Kozlov <yuray@komyakino.ru>, 2021, 2022, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.6-rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2023-01-05 09:46+0300\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <gnu@d07.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 20.12.0\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr "2022-11-02"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "ПользовательÑкие команды"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "ИМЯ"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser - ищет процеÑÑÑ‹, иÑпользующие указанные файлы или Ñокеты"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "ОБЗОР"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> "
+"I<ОБЛÐСТЬ>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<СИГÐÐЛ>] ] I<ИМЯ> …"
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "ОПИСÐÐИЕ"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid ""
+"B<fuser> displays the PIDs of processes using the specified files or file "
+"systems. In the default display mode, each file name is followed by a "
+"letter denoting the type of access:"
+msgstr ""
+"B<fuser> выводит PID процеÑÑов, которые иÑпользуют заданные файлы или "
+"файловые ÑиÑтемы. Ð’ режиме показа по умолчанию к каждому PID добавлÑетÑÑ "
+"буква, Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ‰Ð°Ñ Ñ‚Ð¸Ð¿ доÑтупа:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "текущий каталог."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "работающий иÑполнÑемый файл."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "открытый файл. Ð’ режиме Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию B<f> не выводитÑÑ."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr ""
+"открытый на запиÑÑŒ файл. Ð’ режиме Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию B<F> не выводитÑÑ."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "корневой каталог."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "mmap-нутый файл или Ð¾Ð±Ñ‰Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr ""
+"Символ меÑто замещениÑ, в режиме Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию не выводитÑÑ."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid ""
+"B<fuser> returns a non-zero return code if none of the specified files is "
+"accessed or in case of a fatal error. If at least one access has been "
+"found, B<fuser> returns zero."
+msgstr ""
+"B<fuser> возвращает ненулевой код выхода, еÑли ни к одному из указанных "
+"файлов никто не обращаетÑÑ Ð¸Ð»Ð¸ возникла критичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. ЕÑли найден Ñ…Ð¾Ñ‚Ñ "
+"бы один доÑтуп, то B<fuser> возвращает ноль."
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid ""
+"In order to look up processes using TCP and UDP sockets, the corresponding "
+"name space has to be selected with the B<-n> option. By default B<fuser> "
+"will look in both IPv6 and IPv4 sockets. To change the default behavior, "
+"use the B<-4> and B<-6> options. The socket(s) can be specified by the "
+"local and remote port, and the remote address. All fields are optional, but "
+"commas in front of missing fields must be present:"
+msgstr ""
+"Чтобы найти процеÑÑÑ‹, иÑпользующие Ñокеты TCP и UDP нужно в параметре B<-n> "
+"указать ÑоответÑтвующую облаÑÑ‚ÑŒ имён. По умолчанию B<fuser> проÑматривает "
+"Ñокеты IPv6 и IPv4. Чтобы изменить поведение по умолчанию укажите параметр "
+"B<-4> и B<-6>. Сокеты можно задавать по локальному и удалённому порту и "
+"удалённому адреÑу. Ð’Ñе Ð¿Ð¾Ð»Ñ Ð½ÐµÐ¾Ð±Ñзательны, но должны указыватьÑÑ Ð·Ð°Ð¿Ñтые их "
+"разделÑющие:"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<локальный_порт>][,[I<удалённый_узел>][,[I<удалённый_порт>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid ""
+"Either symbolic or numeric values can be used for IP addresses and port "
+"numbers."
+msgstr ""
+"Ð”Ð»Ñ IP-адреÑов и портов можно иÑпользовать Ñимвольные или чиÑловые значениÑ."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid ""
+"B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr ""
+"B<fuser> выводит в stdout только PID-Ñ‹ , вÑÑ‘ оÑтальное отправлÑетÑÑ Ð² stderr."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "ПÐРÐМЕТРЫ"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid ""
+"Show all files specified on the command line. By default, only files that "
+"are accessed by at least one process are shown."
+msgstr ""
+"Показывать вÑе файлы, указанные в командной Ñтроке. По умолчанию выводÑÑ‚ÑÑ "
+"только файлы, которые иÑпользуютÑÑ Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ одним процеÑÑом."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "Тоже, что и параметр B<-m>, иÑпользуетÑÑ Ð´Ð»Ñ ÑовмеÑтимоÑти Ñ POSIX."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "ИгнорируетÑÑ, иÑпользуетÑÑ Ð´Ð»Ñ ÑовмеÑтимоÑти Ñ POSIX."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid ""
+"Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, "
+"SIGKILL is sent. An B<fuser> process never kills itself, but may kill other "
+"B<fuser> processes. The effective user ID of the process executing B<fuser> "
+"is set to its real user ID before attempting to kill."
+msgstr ""
+"Завершить процеÑÑÑ‹, обращающиеÑÑ Ñ„Ð°Ð¹Ð»Ñƒ. ЕÑли не указан B<->I<СИГÐÐЛ\\/>, то "
+"поÑылаетÑÑ SIGKILL. ПроцеÑÑ B<fuser> никогда не завершает Ñам ÑебÑ, но может "
+"завершить другие процеÑÑÑ‹ B<fuser>. Перед завершением Ñффективный "
+"пользовательÑкий ID процеÑÑа, выполнÑющего B<fuser>, уÑтанавливаетÑÑ Ð² его "
+"дейÑтвительный пользовательÑкий ID."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid ""
+"Ask the user for confirmation before killing a process. This option is "
+"silently ignored if B<-k> is not present too."
+msgstr ""
+"Запрашивать у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ðµ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑа. Этот параметр "
+"игнорируетÑÑ, еÑли не указан B<-k>."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid ""
+"For the name space B<file> let all comparisons be based on the inodes of the "
+"specified file(s) and never on the file names even on network based file "
+"systems."
+msgstr ""
+"Ð”Ð»Ñ Ð¾Ð±Ð»Ð°Ñти имён B<file> выполнÑÑ‚ÑŒ вÑе ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¾ÑновываÑÑÑŒ на инодах "
+"указанных файлов и никогда не иÑпользовать имена файлов, даже Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² в "
+"Ñетевых файловых ÑиÑтемах."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "Показать вÑе извеÑтные имена Ñигналов."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< ИМЯ>, B<--mount >I<ИМЯ>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid ""
+"I<NAME> specifies a file on a mounted file system or a block device that is "
+"mounted. All processes accessing files on that file system are listed. If "
+"a directory is specified, it is automatically changed to I<NAME>/ to use any "
+"file system that might be mounted on that directory."
+msgstr ""
+"Ð’ I<ИМЕÐИ> указываетÑÑ Ñ„Ð°Ð¹Ð» в Ñмонтированной файловой ÑиÑтеме или "
+"Ñмонтированное блочное уÑтройÑтво. ПоказываютÑÑ Ð²Ñе процеÑÑÑ‹, иÑпользующие "
+"вÑе файлы на файловой ÑиÑтеме. ЕÑли указан каталог, то он автоматичеÑки "
+"изменÑетÑÑ Ð½Ð° I<ИМЯ>/, чтобы иÑпользовать вÑе файловые ÑиÑтемы, которые "
+"могут быть Ñмонтированы в Ñтот каталог."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid ""
+"Request will be fulfilled only if I<NAME> specifies a mountpoint. This is "
+"an invaluable seat belt which prevents you from killing the machine if "
+"I<NAME> happens to not be a filesystem."
+msgstr ""
+"ВыполнÑÑ‚ÑŒ запроÑ, только еÑли I<ИМЯ> ÑвлÑетÑÑ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ монтированиÑ. Это "
+"беÑценный ремень безопаÑноÑти, который не позволит угробить машину, еÑли "
+"I<ИМЯ> вдруг не ÑвлÑетÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемой."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid ""
+"Kill only processes which have write access. This option is silently "
+"ignored if B<-k> is not present too."
+msgstr ""
+"Завершать только процеÑÑÑ‹ Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ на запиÑÑŒ. Этот параметр игнорируетÑÑ, "
+"еÑли не указан B<-k>."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< ОБЛÐСТЬ>, B<--namespace >I<ОБЛÐСТЬ>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid ""
+"Select a different name space. The name spaces B<file> (file names, the "
+"default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are "
+"supported. For ports, either the port number or the symbolic name can be "
+"specified. If there is no ambiguity, the shortcut notation I<name>B</"
+">I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr ""
+"Выбрать другую облаÑÑ‚ÑŒ имён. ПоддерживаютÑÑ Ð¾Ð±Ð»Ð°Ñти имён B<file> (имена "
+"файлов, по умолчанию), B<udp> (локальные порты UDP) и B<tcp> (локальные "
+"порты TCP). Порты могут указыватьÑÑ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ или ÑимволичеÑким именем. ЕÑли "
+"не возникает двуÑмыÑленноÑти, то можно иÑпользовать Ñокращённую запиÑÑŒ "
+"I<имÑ>B</>I<облаÑÑ‚ÑŒ> (например, I<80>B</>I<tcp>)."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid ""
+"Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not "
+"be used with B<-s>."
+msgstr ""
+"Ðе выводить ÑообщениÑ. Ð’ Ñтом режиме игнорируютÑÑ B<-u> и B<-v>. Параметр B<-"
+"a> Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать вмеÑте Ñ B<-s>."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<СИГÐÐЛ>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid ""
+"Use the specified signal instead of SIGKILL when killing processes. Signals "
+"can be specified either by name (e.g., B<-HUP>) or by number (e.g., "
+"B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr ""
+"Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов поÑылать указанный Ñигнал вмеÑто SIGKILL. Сигналы "
+"могут задаватьÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ (например, B<-HUP>) или номером (например, B<-1>). "
+"Этот параметр игнорируетÑÑ, еÑли не указан B<-k>."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "ДобавлÑÑ‚ÑŒ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð° процеÑÑа к каждому PID."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid ""
+"Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, "
+"USER and COMMAND are similar to B<ps>. ACCESS shows how the process "
+"accesses the file. Verbose mode will also show when a particular file is "
+"being accessed as a mount point, knfs export or swap file. In this case "
+"B<kernel> is shown instead of the PID."
+msgstr ""
+"Подробный режим. ПроцеÑÑÑ‹ показываютÑÑ Ð² Ñтиле B<ps>. ÐŸÐ¾Ð»Ñ PID, USER и "
+"COMMAND как у B<ps>. Ð’ ACCESS показан тип доÑтупа процеÑÑа к файлу. "
+"Подробный режим будет также иÑпользоватьÑÑ Ð¿Ñ€Ð¸ иÑпользовании определённого "
+"файла в качеÑтве точки монтированиÑ, ÑкÑпорта knfs или файла подкачки. Ð’ "
+"Ñтом Ñлучае вмеÑто PID выводитÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ B<kernel>."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "Показать информацию о верÑии."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid ""
+"Search only for IPv4 sockets. This option must not be used with the B<-6> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"ПоиÑк только Ñреди Ñокетов IPv4. Этот параметр не должен иÑпользоватьÑÑ "
+"вмеÑте Ñ B<-6> и применÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñми имён tcp и udp."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid ""
+"Search only for IPv6 sockets. This option must not be used with the B<-4> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"ПоиÑк только Ñреди Ñокетов IPv6. Этот параметр не должен иÑпользоватьÑÑ "
+"вмеÑте Ñ B<-4> и применÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñми имён tcp и udp."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "ФÐЙЛЫ"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "меÑтонахождение файловой ÑиÑтемы proc"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "ПРИМЕРЫ"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr ""
+"завершить вÑе процеÑÑÑ‹, обращающиеÑÑ Ðº файловой ÑиÑтеме /home любым ÑпоÑобом."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<команда>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "вызвать I<команду>, еÑли нет процеÑÑов, иÑпользующих /dev/ttyS1."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "показать вÑе процеÑÑÑ‹ на (локальном) порту TELNET."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "ОГРÐÐИЧЕÐИЯ"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid ""
+"Processes accessing the same file or file system several times in the same "
+"way are only shown once."
+msgstr ""
+"ПроцеÑÑÑ‹, обращающиеÑÑ Ðº одному файлу или файловой ÑиÑтеме неÑколько раз "
+"одним и тем же ÑпоÑобом, выводÑÑ‚ÑÑ Ð¾Ð´Ð½Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð¾."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid ""
+"If the same object is specified several times on the command line, some of "
+"those entries may be ignored."
+msgstr ""
+"ЕÑли в командной Ñтроке один объект указываетÑÑ Ð½ÐµÑколько раз, то некоторые "
+"из Ñтих Ñлементов могут игнорироватьÑÑ."
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid ""
+"B<fuser> may only be able to gather partial information unless run with "
+"privileges. As a consequence, files opened by processes belonging to other "
+"users may not be listed and executables may be classified as mapped only."
+msgstr ""
+"B<fuser> может Ñобирать некоторую информацию только Ð¸Ð¼ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ "
+"права. Ð’ чаÑтноÑти, открытые процеÑÑами файлы, принадлежащие другим "
+"пользователÑм, могут не поÑвитьÑÑ, а иÑполнÑемые файлы могут быть отнеÑены "
+"только к отображённым."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid ""
+"B<fuser> cannot report on any processes that it doesn't have permission to "
+"look at the file descriptor table for. The most common time this problem "
+"occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-"
+"root user. In this case B<fuser> will report no access."
+msgstr ""
+"B<fuser> не может Ñообщить о процеÑÑах, еÑли не имеет прав поиÑка в таблице "
+"файловых деÑкрипторов. Чаще вÑего Ñта проблема возникает при поиÑке Ñокетов "
+"TCP или UDP в Ñлучае, еÑли B<fuser> запуÑкаетÑÑ Ð±ÐµÐ· прав Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ root. "
+"Ð’ Ñтом Ñлучае B<fuser> Ñообщит, что нет доÑтупа."
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid ""
+"Installing B<fuser> SUID root will avoid problems associated with partial "
+"information, but may be undesirable for security and privacy reasons."
+msgstr ""
+"УÑтановка B<fuser> как SUID root решит проблему доÑтупа к определённой "
+"информации, но может быть нежелательна при Ñоблюдении безопаÑноÑти и "
+"конфиденциальноÑти."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid ""
+"B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched "
+"with kernels older than 1.3.78."
+msgstr ""
+"ОблаÑти имён B<udp>, B<tcp> и доменные Ñокеты UNIX не опрашиваютÑÑ, еÑли "
+"иÑпользуютÑÑ Ñдра Ñтарее верÑии 1.3.78."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "ÐžÐ±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñдра показываютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ B<-v>."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid ""
+"The B<-k> option only works on processes. If the user is the kernel, "
+"B<fuser> will print an advice, but take no action beyond that."
+msgstr ""
+"Параметр B<-k> применим только Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов. ЕÑли пользователем ÑвлÑетÑÑ "
+"Ñдро, то B<fuser> выводит только Ñовет и ничего не делает."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid ""
+"B<fuser> will not see block devices mounted by processes in a different "
+"mount namespace. This is due to the device ID shown in the process' file "
+"descriptor table being from the process namespace, not fuser's; meaning it "
+"won't match."
+msgstr ""
+"B<fuser> не видит блочные уÑтройÑтва, Ñмонтированные процеÑÑами в других "
+"проÑтранÑтвах имён монтированиÑ. Это проиÑходит из-за того, что ID "
+"уÑтройÑтва в таблице файловых деÑкрипторов процеÑÑа берётÑÑ Ð¸Ð· проÑтранÑтва "
+"имён процеÑÑа, а не fuser и они не Ñовпадают."
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "ДЕФЕКТЫ"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid ""
+"B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, "
+"even if you don't have that device configured. There may be other devices "
+"it does this for too."
+msgstr ""
+"B<fuser -m /dev/sgX> покажет (или завершит, еÑли указан B<-k>) вÑе процеÑÑÑ‹, "
+"даже еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ Ñтого наÑтроенного уÑтройÑтва. Также, Ð´Ð»Ñ Ñтого могут "
+"быть другие уÑтройÑтва."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid ""
+"The mount B<-m> option will match any file within the same device as the "
+"specified file, use the B<-M> option as well if you mean to specify only the "
+"mount point."
+msgstr ""
+"При параметре Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ B<-m> найдутÑÑ Ð²Ñе файлы на том же уÑтройÑтве, "
+"что и указанный файл, дополнительно укажите параметр B<-M>, еÑли вы "
+"подразумевали только точку монтированиÑ."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid ""
+"B<fuser> will not match mapped files, such as a process' shared libraries if "
+"they are on a B<btrfs>(5) filesystem due to the device IDs being different "
+"for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "СМОТРИТЕ ТÐКЖЕ"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+#, fuzzy
+#| msgid ""
+#| "B<kill>(1), B<killall>(1), B<lsof>(8), B<mount_namespaces>(7), "
+#| "B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgid ""
+"B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), "
+"B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr ""
+"B<kill>(1), B<killall>(1), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), "
+"B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, fuzzy, no-wrap
+#| msgid "2021-06-21"
+msgid "2023-06-17"
+msgstr "2021-06-21"
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall - завершает процеÑÑÑ‹ Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ именем"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid ""
+"B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --"
+"user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<name> ..."
+msgstr ""
+"B<killall> [B<-Z>,B<\\ --context> I<шаблон>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<ВРЕМЯ>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<СИГÐÐЛ>,\\ B<->I<СИГÐÐЛ>] [B<-u>,B<\\ --"
+"user> I<пользователь>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,"
+"B<\\ --younger-than> I<ВРЕМЯ>] [B<-I>,B<\\ --ignore-case>] [B<-V>,\\ --"
+"version] [B<-->] I<имÑ> …"
+
+#. type: Plain text
+#: ../doc/killall.1:41
+#, fuzzy
+#| msgid "B<killall> B<-V>,B<\\ --version>"
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid ""
+"B<killall> sends a signal to all processes running any of the specified "
+"commands. If no signal name is specified, SIGTERM is sent."
+msgstr ""
+"B<killall> поÑылает Ñигнал вÑем процеÑÑам, выполнÑющим любую указанную "
+"команду. ЕÑли не указано Ð¸Ð¼Ñ Ñигнала, то иÑпользуетÑÑ SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+#, fuzzy
+#| msgid ""
+#| "Signals can be specified either by name (e.g. B<-HUP> or B<-SIGHUP>) or "
+#| "by number (e.g. B<-1>) or by option B<-s>."
+msgid ""
+"Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or "
+"by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr ""
+"Сигналы можно задавать именем (например, B<-HUP> или B<-SIGHUP>), номером "
+"(например, B<-1>) или в параметре B<-s>."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid ""
+"If the command name is not regular expression (option B<-r>) and contains a "
+"slash (B</>), processes executing that particular file will be selected for "
+"killing, independent of their name."
+msgstr ""
+"ЕÑли Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ не ÑвлÑетÑÑ Ñ€ÐµÐ³ÑƒÐ»Ñрным выражением (параметр B<-r>) и "
+"Ñодержит коÑую черту (B</>), то процеÑÑÑ‹, выполнÑющие Ñтот определённый "
+"файл, будут выбраны Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо от их имени."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid ""
+"B<killall> returns a zero return code if at least one process has been "
+"killed for each listed command, or no commands were listed and at least one "
+"process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-"
+"zero otherwise."
+msgstr ""
+"B<killall> возвращает код выхода ноль, еÑли был завершён Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один "
+"процеÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ заданной команды, или, еÑли команды не указаны, Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ "
+"один процеÑÑ, подошедший под Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð¸Ñка по B<-u> и B<-Z>. Ð’ противном "
+"Ñлучае B<killall> возвращает ненулевое значение."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid ""
+"A B<killall> process never kills itself (but may kill other B<killall> "
+"processes)."
+msgstr ""
+"ПроцеÑÑ B<killall> никогда не завершает Ñам ÑÐµÐ±Ñ (но может завершить другие "
+"процеÑÑÑ‹ B<killall>)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid ""
+"Require an exact match for very long names. If a command name is longer "
+"than 15 characters, the full name may be unavailable (i.e. it is swapped "
+"out). In this case, B<killall> will kill everything that matches within the "
+"first 15 characters. With B<-e>, such entries are skipped. B<killall> "
+"prints a message for each skipped entry if B<-v> is specified in addition to "
+"B<-e>."
+msgstr ""
+"Требовать полного ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ñ‡ÐµÐ½ÑŒ длинных имён. ЕÑли Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ "
+"длиннее чем 15 Ñимволов, то полное Ð¸Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть недоÑтупно (Ñ‚. е., чаÑÑ‚ÑŒ "
+"затёрлаÑÑŒ). Ð’ Ñтом Ñлучае, B<killall> завершит вÑе процеÑÑÑ‹, Ñовпадающие по "
+"первым 15 Ñимволам. С параметром B<-e> такие Ñлементы не обрабатываютÑÑ. "
+"B<killall> выводит Ñообщение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ необработанного Ñлемента, еÑли "
+"вмеÑте Ñ B<-e> дополнительно указан параметр B<-v>."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "Игнорировать региÑÑ‚Ñ€ Ñимволов в именах процеÑÑов."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid ""
+"Kill the process group to which the process belongs. The kill signal is "
+"only sent once per group, even if multiple processes belonging to the same "
+"process group were found."
+msgstr ""
+"Завершить группу процеÑÑа, в которую входит процеÑÑ. Ðа вÑÑŽ группу "
+"поÑылаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ один Ñигнал завершениÑ, даже еÑли в группе найдено "
+"неÑколько процеÑÑов."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "Запрашивать подтверждение перед завершением процеÑÑов."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid ""
+"Match against the PID namespace of the given PID. The default is to match "
+"against all namespaces."
+msgstr ""
+"ИÑкать процеÑÑÑ‹ в том же проÑтранÑтве имён PID что и у PID. По умолчанию "
+"поиÑк выполнÑетÑÑ Ð¿Ð¾ вÑем проÑтранÑтвам имён."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid ""
+"Match only processes that are older (started before) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr ""
+"ИÑкать процеÑÑÑ‹, Ñтарее (запущенные до) заданного времени. Ð’Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´Ð°Ñ‘Ñ‚ÑÑ Ð² "
+"виде чиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точки и идентификатора. Идентификаторами могут быть s,"
+"m,h,d,w,M,y (Ñекунды, минуты, чаÑÑ‹, дни, недели, меÑÑцы и года, "
+"ÑоответÑтвенно)."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "Ðе Ñообщать, еÑли ни одного процеÑÑа не завершено."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid ""
+"Interpret process name pattern as a POSIX extended regular expression, per "
+"B<regex>(3)."
+msgstr ""
+"РаÑÑматривать шаблон имени процеÑÑа как раÑширенное регулÑрное выражение "
+"POSIX ÑоглаÑно B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<СИГÐÐЛ>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "ПоÑылать указанный СИГÐÐЛ, а не SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid ""
+"Kill only processes the specified user owns. Command names are optional."
+msgstr ""
+"Завершить процеÑÑÑ‹, принадлежащие указанному пользователю. Имена команд "
+"необÑзательны."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "УведомлÑÑ‚ÑŒ об уÑпешной отправке Ñигнала."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid ""
+"Wait for all killed processes to die. B<killall> checks once per second if "
+"any of the killed processes still exist and only returns if none are left. "
+"Note that B<killall> may wait forever if the signal was ignored, had no "
+"effect, or if the process stays in zombie state."
+msgstr ""
+"Ожидать Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов. B<killall> проверÑет раз в Ñекунду "
+"ÑущеÑтвование завершаемых процеÑÑов и прекращает работу только еÑли никого "
+"не оÑталоÑÑŒ.Заметим, что B<killall> может ждать вечно, еÑли Ñигнал был "
+"проигнорирован, никак не повлиÑл или еÑли процеÑÑ Ð¾ÑталÑÑ Ð² ÑоÑтоÑнии зомби."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid ""
+"Match only processes that are younger (started after) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr ""
+"ИÑкать процеÑÑÑ‹, новее (запущенные поÑле) заданного времени. Ð’Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´Ð°Ñ‘Ñ‚ÑÑ "
+"в виде чиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точки и идентификатора. Идентификаторами могут быть "
+"s,m,h,d,w,M,y (Ñекунды, минуты, чаÑÑ‹, дни, недели, меÑÑцы и года, "
+"ÑоответÑтвенно)."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid ""
+"Specify security context: kill only processes having security context that "
+"match with given extended regular expression pattern. Must precede other "
+"arguments on the command line. Command names are optional."
+msgstr ""
+"Задать контекÑÑ‚ безопаÑноÑти: завершать только процеÑÑÑ‹ Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтом "
+"безопаÑноÑти, который Ñовпадает Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ шаблоном раÑширенного регулÑрного "
+"выражениÑ. Ð’ командной Ñтроке должен указыватьÑÑ Ñ€Ð°Ð½ÑŒÑˆÐµ оÑтальных "
+"параметров. Имена команд необÑзательны."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "ИЗВЕСТÐЫЕ ДЕФЕКТЫ"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid ""
+"Killing by file only works for executables that are kept open during "
+"execution, i.e. impure executables can't be killed this way."
+msgstr ""
+"Завершение по указанному файлу работает только Ð´Ð»Ñ Ð¸ÑполнÑемых файлов, "
+"которые оÑтаютÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼Ð¸ при выполнении, то еÑÑ‚ÑŒ недвоичные иÑполнÑемые "
+"файлы не могут завершатьÑÑ Ñтим ÑпоÑобом."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid ""
+"Be warned that typing B<killall> I<name> may not have the desired effect on "
+"non-Linux systems, especially when done by a privileged user."
+msgstr ""
+"Обратите внимание, что ввод B<killall> I<имÑ> может не привеÑти к желаемому "
+"дейÑтвиÑм на не Linux ÑиÑтемах, оÑобенно при запуÑке от привилегированного "
+"пользователÑ."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid ""
+"B<killall -w> doesn't detect if a process disappears and is replaced by a "
+"new process with the same PID between scans."
+msgstr ""
+"B<killall -w> не понимает, что процеÑÑ Ð¸Ñчез и заменён новым процеÑÑом Ñ Ñ‚ÐµÐ¼ "
+"же PID между опроÑами."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid ""
+"If processes change their name, B<killall> may not be able to match them "
+"correctly."
+msgstr "ЕÑли процеÑÑÑ‹ менÑÑŽÑ‚ Ñвои имена, B<killall> может не найти их."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid ""
+"B<killall> has a limit of names that can be specified on the command line. "
+"This figure is the size of an unsigned long integer multiplied by 8. For "
+"most 32 bit systems the limit is 32 and similarly for a 64 bit system the "
+"limit is usually 64."
+msgstr ""
+"B<killall> имеет ограничение на имена, которые могут быть указаны в "
+"командной Ñтроке. Оно равно размеру unsigned long integer умноженному на 8. "
+"Ð”Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва 32-битных ÑиÑтем ограничение равно 32, а Ð´Ð»Ñ 64-битных "
+"ÑиÑтем, обычно, равно 64."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+msgstr ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "2021-12-01"
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr "peekfd - подглÑдывает в файловые деÑкрипторы выполнÑющихÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] …"
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid ""
+"B<peekfd> attaches to a running process and intercepts all reads and writes "
+"to file descriptors. You can specify the desired file descriptor numbers or "
+"dump all of them."
+msgstr ""
+"B<peekfd> подключаетÑÑ Ðº выполнÑющемуÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑÑу и перехватывает вÑе Ñ‡Ñ‚ÐµÐ½Ð¸Ñ "
+"и запиÑи в файловые деÑкрипторы. Ð’Ñ‹ можете указать номер желаемого файлового "
+"деÑкриптора или захватить их вÑе."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr "Ðе выполнÑÑ‚ÑŒ конечную обработку читаемых и запиÑываемых байт."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr "Ðе отображать заголовки, показывающие иÑточник получаемых байт."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid ""
+"Also dump the requested file descriptor activity in any new child processes "
+"that are created."
+msgstr ""
+"Ðаблюдать также за дейÑтвиÑми Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ð¼ файловым деÑкриптором и во вÑех "
+"новых дочерних процеÑÑах."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid ""
+"Remove duplicate read/writes from the output. If you're looking at a tty "
+"with echo, you might want this."
+msgstr ""
+"УдалÑÑ‚ÑŒ повторÑющиеÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ чтениÑ/запиÑи при выводе. Полезно, еÑли "
+"обрабатываетÑÑ tty Ñ Ñхо."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "ВывеÑти информацию о верÑии."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "Показать Ñправку."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid ""
+"Not used but useful for the user to look at to get good file descriptor "
+"numbers."
+msgstr ""
+"Ðе иÑпользуетÑÑ, то полезно пользователю, чтобы найти нужные номера файловых "
+"деÑкрипторов."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "ОКРУЖЕÐИЕ"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "Ðет."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "ДИÐГÐОСТИКÐ"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr "Ð’ stderr могут выдаватьÑÑ Ñледующие отладочные ÑообщениÑ:"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Ошибка приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº pid >I<E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid ""
+"An unknown error occurred while attempted to attach to a process, you may "
+"need to be root."
+msgstr ""
+"Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при попытке приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº процеÑÑа, вероÑтно "
+"нужны права root."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid ""
+"Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr "ВероÑтно много. Ðе удивлÑйтеÑÑŒ, еÑли отÑлеживаемый процеÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑÑ."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "ÐВТОР"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "2020-09-09"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "Linux\""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "РуководÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Linux"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog - выводит текущие пути журнала процеÑÑа"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<pid> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr "Команда B<pslog> выводит текущие рабочие журналы процеÑÑа."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. "
+"Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> напиÑал B<pslog> в 2015 "
+"году. ОтправлÑйте ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках по адреÑу E<.MT mulevito@gmail.com> "
+"E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat - выводит ÑтатиÑтику по процеÑÑу"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid ""
+"B<prtstat> prints the statistics of the specified process. This information "
+"comes from the B</proc/>I<pid>B</stat> file."
+msgstr ""
+"B<prtstat> выводит ÑтатиÑтику по указанному процеÑÑу. Эта Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð±ÐµÑ€Ñ‘Ñ‚ÑÑ "
+"из файла B</proc/>I<pid>B</stat>."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "ВывеÑти информацию в необработанном виде."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "ВывеÑти информацию о верÑии B<prtstat>."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<pid>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "иÑточник информации, который иÑпользует B<prtstat>."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "2021-06-21"
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree - показывает дерево процеÑÑов"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-"
+"n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,"
+"B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<пользователь>]"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid ""
+"B<pstree> shows running processes as a tree. The tree is rooted at either "
+"I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all "
+"process trees rooted at processes owned by that user are shown."
+msgstr ""
+"B<pstree> показывает выполнÑющиеÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑÑÑ‹ в виде дерева. Корнем дерева "
+"ÑвлÑетÑÑ I<pid> или B<init>, еÑли I<pid> не указан. ЕÑли указано Ð¸Ð¼Ñ "
+"пользователÑ, то вÑе показываемые процеÑÑÑ‹ в дереве начинаютÑÑ Ð¾Ñ‚ процеÑÑов, "
+"принадлежащих Ñтому пользователю."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid ""
+"B<pstree> visually merges identical branches by putting them in square "
+"brackets and prefixing them with the repetition count, e.g."
+msgstr ""
+"B<pstree> визуально объединÑет одинаковые ветви, Ð·Ð°ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¸Ñ… в квадратные "
+"Ñкобки и показывает перед ними количеÑтво повторов, например"
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "показываетÑÑ ÐºÐ°Ðº"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid ""
+"Child threads of a process are found under the parent process and are shown "
+"with the process name in curly braces, e.g."
+msgstr ""
+"ЕÑли у Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»Ñ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ñ‹ дочерние нити процеÑÑов, то они показываютÑÑ ÐºÐ°Ðº "
+"Ð¸Ð¼Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑ Ð² фигурных Ñкобках, например"
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid ""
+"If B<pstree> is called as B<pstree.x11> then it will prompt the user at the "
+"end of the line to press return and will not return until that has "
+"happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr ""
+"ЕÑли B<pstree> вызываетÑÑ ÐºÐ°Ðº B<pstree.x11>, то в конце данных выводитÑÑ "
+"приглашение пользователю нажать return и программа не завершаетÑÑ Ð¿Ð¾ÐºÐ° Ñтого "
+"не будет Ñделано. Это полезно, еÑли B<pstree> запуÑкаетÑÑ Ð² xterminal."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid ""
+"Certain kernel or mount parameters, such as the I<hidepid> option for "
+"procfs, will hide information for some processes. In these situations "
+"B<pstree> will attempt to build the tree without this information, showing "
+"process names as question marks."
+msgstr ""
+"Ðекоторые параметры Ñдра или монтированиÑ, такие как параметр I<hidepid> Ð´Ð»Ñ "
+"procfs, Ñкрывают информацию Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… процеÑÑов. Ð’ Ñтих ÑитуациÑÑ… "
+"B<pstree> пытаетÑÑ Ð¿Ð¾Ñтроить дерево без Ñтой информации, Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°Ñ Ð²Ð¼ÐµÑто "
+"имён процеÑÑов знаки вопроÑа."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid ""
+"Show command line arguments. If the command line of a process is swapped "
+"out, that process is shown in parentheses. B<-a> implicitly disables "
+"compaction for processes but not threads."
+msgstr ""
+"Показывать аргументы командной Ñтроки. ЕÑли ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока процеÑÑа "
+"затёрлаÑÑŒ, то процеÑÑ Ð¿Ð¾ÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ÑÑ Ð² Ñкобках. Параметр B<-a> неÑвно "
+"отключает Ñжатие процеÑÑов, но не нитей."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "ИÑпользовать ASCII-Ñимволы Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÑ€ÐµÐ²Ð°."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid ""
+"Disable compaction of identical subtrees. By default, subtrees are "
+"compacted whenever possible."
+msgstr ""
+"Ðе Ñжимать одинаковые поддеревьÑ. По умолчанию Ð¿Ð¾Ð´Ð´ÐµÑ€ÐµÐ²ÑŒÑ ÑжимаютÑÑ Ð²ÐµÐ·Ð´Ðµ "
+"где возможно."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid ""
+"Color the process name by given attribute. Currently B<pstree> only accepts "
+"the value B<age> which colors by process age. Processes newer than 60 "
+"seconds are green, newer than an hour yellow and the remaining red."
+msgstr ""
+"РаÑкрашивать имена процеÑÑов по заданному атрибуту. Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ "
+"B<pstree> поддерживает только значение B<age>, означающее раÑкраÑку по "
+"возраÑту процеÑÑа. ПроцеÑÑÑ‹ новее 60 Ñекунд выводÑÑ‚ÑÑ Ð·ÐµÐ»Ñ‘Ð½Ñ‹Ð¼Ð¸, новее чаÑа — "
+"жёлтыми, а оÑтальные краÑными."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid ""
+"Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses "
+"after each process name. If both PIDs and PGIDs are displayed then PIDs are "
+"shown first."
+msgstr ""
+"Показывать PGID. Идентификаторы групп процеÑÑа показываютÑÑ Ð´ÐµÑÑтичными "
+"чиÑлами в Ñкобках поÑле каждого имени процеÑÑа. ЕÑли выводÑÑ‚ÑÑ PID и PGID, "
+"то PID показываютÑÑ Ð¿ÐµÑ€Ð²Ñ‹Ð¼Ð¸."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "ИÑпользовать Ñимволы риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¹ от VT100."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid ""
+"Highlight the current process and its ancestors. This is a no-op if the "
+"terminal doesn't support highlighting or if neither the current process nor "
+"any of its ancestors are in the subtree being shown."
+msgstr ""
+"ПодÑветить текущий процеÑÑ Ð¸ его предков. Ðичего не проиÑходит, еÑли "
+"терминал не поддерживает подÑветку или еÑли текущий процеÑÑ Ð¸Ð»Ð¸ его потомки "
+"не показываютÑÑ Ð² поддереве."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid ""
+"Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, "
+"B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr ""
+"Подобен B<-h>, но подÑвечиваетÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ процеÑÑ. Ð’ отличии от B<-h>, "
+"B<pstree> завершаетÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹, еÑли указан B<-H> и подÑветка недоÑтупна."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid ""
+"Display long lines. By default, lines are truncated to either the COLUMNS "
+"environment variable or the display width. If neither of these methods "
+"work, the default of 132 columns is used."
+msgstr ""
+"Показывать длинные Ñтроки. По умолчанию, Ñтроки обрезаютÑÑ Ð´Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð· "
+"переменной Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ COLUMNS или до ширины Ñкрана. ЕÑли ни одно из Ñтого "
+"недоÑтупно, то по умолчанию иÑпользуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ в 132 колонки."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid ""
+"Sort processes with the same parent by PID instead of by name. (Numeric "
+"sort.)"
+msgstr ""
+"Сортировать процеÑÑÑ‹ Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ именем Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾ PID, а не по имени "
+"(чиÑÐ»Ð¾Ð²Ð°Ñ Ñортировка)."
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid ""
+"Show individual trees for each namespace of the type specified. The "
+"available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, "
+"I<uts>. Regular users don't have access to other users' processes "
+"information, so the output will be limited."
+msgstr ""
+"Показывать отдельные Ð´ÐµÑ€ÐµÐ²ÑŒÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ облаÑти имён заданного типа. "
+"ДоÑтупные типы: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. "
+"Обычные пользователи не имеют доÑтупа к информации о процеÑÑах других "
+"пользователей, поÑтому вывод будет ограниченным."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid ""
+"Show PIDs. PIDs are shown as decimal numbers in parentheses after each "
+"process name. B<-p> implicitly disables compaction."
+msgstr ""
+"Показывать идентификаторы пользователей. PID показываетÑÑ Ð´ÐµÑÑтичными "
+"чиÑлами в Ñкобках поÑле каждого имени процеÑÑа. B<-p> неÑвно отключает "
+"Ñжатие."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "Показывать родителей указанного процеÑÑа."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid ""
+"Show namespaces transitions. Like B<-N>, the output is limited when running "
+"as a regular user."
+msgstr ""
+"Показывать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð±Ð»Ð°Ñтей имён. Подобен B<-N>, вывод ограничен при "
+"запуÑке обычным пользователем."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "Показывать полные имена нитей, еÑли доÑтупны."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "Скрывать нити и показывать только процеÑÑÑ‹."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid ""
+"Show uid transitions. Whenever the uid of a process differs from the uid of "
+"its parent, the new uid is shown in parentheses after the process name."
+msgstr ""
+"Показывать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð² пользователей. ЕÑли uid процеÑÑа "
+"отличаетÑÑ Ð¾Ñ‚ uid его родителÑ, то показываетÑÑ Ð½Ð¾Ð²Ñ‹Ð¹ uid в Ñкобках поÑле "
+"имени процеÑÑа."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid ""
+"Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, "
+"UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with "
+"B<echo -e '\\033%@'>."
+msgstr ""
+"ИÑпользовать Ñимволы риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¹ UTF-8 (Юникод). Ð’ Linux 1.1-54 и новее "
+"режим UTF-8 включаетÑÑ Ð½Ð° конÑоли командной B<echo -e '\\033%8'> и "
+"выключаетÑÑ B<echo -e '\\033%@'>."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid ""
+"Show the current security attributes of the process. For SELinux systems "
+"this will be the security context."
+msgstr ""
+"Показывать текущие атрибуты безопаÑноÑти процеÑÑа. Ð”Ð»Ñ ÑиÑтем SELinux "
+"иÑпользуетÑÑ ÐºÐ¾Ð½Ñ‚ÐµÐºÑÑ‚ безопаÑноÑти."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "Ðекоторые наборы Ñимволов могут быть неÑовмеÑтимы Ñ Ñимволами VT100."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
+
+#, no-wrap
+#~ msgid "2021-01-11"
+#~ msgstr "2021-01-11"
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
+
+#~ msgid "B<->"
+#~ msgstr "B<->"
+
+#~ msgid "Reset all options and set the signal back to SIGKILL."
+#~ msgstr ""
+#~ "Отменить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ñех параметров и уÑтановить Ñигнал обратно в SIGKILL."
+
+#~ msgid ""
+#~ "(SELinux) Show security context for each process. This flag will only "
+#~ "work if B<pstree> is compiled with SELinux support."
+#~ msgstr ""
+#~ "(SELinux) Показывать текущий контекÑÑ‚ безопаÑноÑти каждого процеÑÑа. Этот "
+#~ "флаг работает только, еÑли B<pstree> Ñкомпилирована Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ SELinux."
+
+#~ msgid "2021-01-05"
+#~ msgstr "2021-01-05"
diff --git a/man-po/ru/fuser.1 b/man-po/ru/fuser.1
new file mode 100644
index 0000000..28b1277
--- /dev/null
+++ b/man-po/ru/fuser.1
@@ -0,0 +1,221 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 2022\-11\-02 psmisc "ПользовательÑкие команды"
+.SH ИМЯ
+fuser \- ищет процеÑÑÑ‹, иÑпользующие указанные файлы или Ñокеты
+.SH ОБЗОР
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP
+\fIОБЛÐСТЬ\fP] [\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fIСИГÐÐЛ\fP] ] \fIИМЯ\fP …
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH ОПИСÐÐИЕ
+\fBfuser\fP выводит PID процеÑÑов, которые иÑпользуют заданные файлы или
+файловые ÑиÑтемы. Ð’ режиме показа по умолчанию к каждому PID добавлÑетÑÑ
+буква, Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ‰Ð°Ñ Ñ‚Ð¸Ð¿ доÑтупа:
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+текущий каталог.
+.TP
+\fBe\fP
+работающий иÑполнÑемый файл.
+.TP
+\fBf\fP
+открытый файл. Ð’ режиме Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию \fBf\fP не выводитÑÑ.
+.TP
+\fBF\fP
+открытый на запиÑÑŒ файл. Ð’ режиме Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию \fBF\fP не
+выводитÑÑ.
+.TP
+\fBr\fP
+корневой каталог.
+.TP
+\fBm\fP
+mmap\-нутый файл или Ð¾Ð±Ñ‰Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°.
+.TP
+\&\fB.\fP
+Символ меÑто замещениÑ, в режиме Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию не выводитÑÑ.
+.PD
+.RE
+.LP
+\fBfuser\fP возвращает ненулевой код выхода, еÑли ни к одному из указанных
+файлов никто не обращаетÑÑ Ð¸Ð»Ð¸ возникла критичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. ЕÑли найден хотÑ
+бы один доÑтуп, то \fBfuser\fP возвращает ноль.
+.PP
+Чтобы найти процеÑÑÑ‹, иÑпользующие Ñокеты TCP и UDP нужно в параметре \fB\-n\fP
+указать ÑоответÑтвующую облаÑÑ‚ÑŒ имён. По умолчанию \fBfuser\fP проÑматривает
+Ñокеты IPv6 и IPv4. Чтобы изменить поведение по умолчанию укажите параметр
+\fB\-4\fP и \fB\-6\fP. Сокеты можно задавать по локальному и удалённому порту и
+удалённому адреÑу. Ð’Ñе Ð¿Ð¾Ð»Ñ Ð½ÐµÐ¾Ð±Ñзательны, но должны указыватьÑÑ Ð·Ð°Ð¿Ñтые их
+разделÑющие:
+.PP
+[\fIлокальный_порт\fP][,[\fIудалённый_узел\fP][,[\fIудалённый_порт\fP]]]
+.PP
+Ð”Ð»Ñ IP\-адреÑов и портов можно иÑпользовать Ñимвольные или чиÑловые значениÑ.
+.PP
+\fBfuser\fP выводит в stdout только PID\-Ñ‹ , вÑÑ‘ оÑтальное отправлÑетÑÑ Ð²
+stderr.
+.SH ПÐРÐМЕТРЫ
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+Показывать вÑе файлы, указанные в командной Ñтроке. По умолчанию выводÑÑ‚ÑÑ
+только файлы, которые иÑпользуютÑÑ Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ одним процеÑÑом.
+.TP
+\fB\-c\fP
+Тоже, что и параметр \fB\-m\fP, иÑпользуетÑÑ Ð´Ð»Ñ ÑовмеÑтимоÑти Ñ POSIX.
+.TP
+\fB\-f\fP
+ИгнорируетÑÑ, иÑпользуетÑÑ Ð´Ð»Ñ ÑовмеÑтимоÑти Ñ POSIX.
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+Завершить процеÑÑÑ‹, обращающиеÑÑ Ñ„Ð°Ð¹Ð»Ñƒ. ЕÑли не указан \fB\-\fP\fIСИГÐÐЛ\/\fP, то
+поÑылаетÑÑ SIGKILL. ПроцеÑÑ \fBfuser\fP никогда не завершает Ñам ÑебÑ, но может
+завершить другие процеÑÑÑ‹ \fBfuser\fP. Перед завершением Ñффективный
+пользовательÑкий ID процеÑÑа, выполнÑющего \fBfuser\fP, уÑтанавливаетÑÑ Ð² его
+дейÑтвительный пользовательÑкий ID.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+Запрашивать у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ðµ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑа. Этот параметр
+игнорируетÑÑ, еÑли не указан \fB\-k\fP.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+Ð”Ð»Ñ Ð¾Ð±Ð»Ð°Ñти имён \fBfile\fP выполнÑÑ‚ÑŒ вÑе ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¾ÑновываÑÑÑŒ на инодах
+указанных файлов и никогда не иÑпользовать имена файлов, даже Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² в
+Ñетевых файловых ÑиÑтемах.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+Показать вÑе извеÑтные имена Ñигналов.
+.TP
+\fB\-m\fP\fI ИМЯ\fP, \fB\-\-mount \fP\fIИМЯ\fP
+Ð’ \fIИМЕÐИ\fP указываетÑÑ Ñ„Ð°Ð¹Ð» в Ñмонтированной файловой ÑиÑтеме или
+Ñмонтированное блочное уÑтройÑтво. ПоказываютÑÑ Ð²Ñе процеÑÑÑ‹, иÑпользующие
+вÑе файлы на файловой ÑиÑтеме. ЕÑли указан каталог, то он автоматичеÑки
+изменÑетÑÑ Ð½Ð° \fIИМЯ\fP/, чтобы иÑпользовать вÑе файловые ÑиÑтемы, которые
+могут быть Ñмонтированы в Ñтот каталог.
+.TP
+\fB\-M\fP, \fB\-\-ismountpoint\fP
+ВыполнÑÑ‚ÑŒ запроÑ, только еÑли \fIИМЯ\fP ÑвлÑетÑÑ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ монтированиÑ. Это
+беÑценный ремень безопаÑноÑти, который не позволит угробить машину, еÑли
+\fIИМЯ\fP вдруг не ÑвлÑетÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемой.
+.TP
+\fB\-w\fP
+Завершать только процеÑÑÑ‹ Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ на запиÑÑŒ. Этот параметр игнорируетÑÑ,
+еÑли не указан \fB\-k\fP.
+.TP
+\fB\-n\fP\fI ОБЛÐСТЬ\fP, \fB\-\-namespace \fP\fIОБЛÐСТЬ\fP
+Выбрать другую облаÑÑ‚ÑŒ имён. ПоддерживаютÑÑ Ð¾Ð±Ð»Ð°Ñти имён \fBfile\fP (имена
+файлов, по умолчанию), \fBudp\fP (локальные порты UDP) и \fBtcp\fP (локальные
+порты TCP). Порты могут указыватьÑÑ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ или ÑимволичеÑким именем. ЕÑли
+не возникает двуÑмыÑленноÑти, то можно иÑпользовать Ñокращённую запиÑÑŒ
+\fIимÑ\fP\fB/\fP\fIоблаÑÑ‚ÑŒ\fP (например, \fI80\fP\fB/\fP\fItcp\fP).
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+Ðе выводить ÑообщениÑ. Ð’ Ñтом режиме игнорируютÑÑ \fB\-u\fP и \fB\-v\fP. Параметр
+\fB\-a\fP Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать вмеÑте Ñ \fB\-s\fP.
+.TP
+\fB\-\fP\fIСИГÐÐЛ\fP
+Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов поÑылать указанный Ñигнал вмеÑто SIGKILL. Сигналы
+могут задаватьÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ (например, \fB\-HUP\fP) или номером (например,
+\fB\-1\fP). Этот параметр игнорируетÑÑ, еÑли не указан \fB\-k\fP.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+ДобавлÑÑ‚ÑŒ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð° процеÑÑа к каждому PID.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+Подробный режим. ПроцеÑÑÑ‹ показываютÑÑ Ð² Ñтиле \fBps\fP. ÐŸÐ¾Ð»Ñ PID, USER и
+COMMAND как у \fBps\fP. Ð’ ACCESS показан тип доÑтупа процеÑÑа к
+файлу. Подробный режим будет также иÑпользоватьÑÑ Ð¿Ñ€Ð¸ иÑпользовании
+определённого файла в качеÑтве точки монтированиÑ, ÑкÑпорта knfs или файла
+подкачки. Ð’ Ñтом Ñлучае вмеÑто PID выводитÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ \fBkernel\fP.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Показать информацию о верÑии.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+ПоиÑк только Ñреди Ñокетов IPv4. Этот параметр не должен иÑпользоватьÑÑ
+вмеÑте Ñ \fB\-6\fP и применÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñми имён tcp и udp.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+ПоиÑк только Ñреди Ñокетов IPv6. Этот параметр не должен иÑпользоватьÑÑ
+вмеÑте Ñ \fB\-4\fP и применÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñми имён tcp и udp.
+.SH ФÐЙЛЫ
+.TP
+/proc
+меÑтонахождение файловой ÑиÑтемы proc
+.SH ПРИМЕРЫ
+.TP
+\fBfuser \-km /home\fP
+завершить вÑе процеÑÑÑ‹, обращающиеÑÑ Ðº файловой ÑиÑтеме /home любым
+ÑпоÑобом.
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fIкоманда\fP\fB; fi\fP
+вызвать \fIкоманду\fP, еÑли нет процеÑÑов, иÑпользующих /dev/ttyS1.
+.TP
+\fBfuser telnet/tcp\fP
+показать вÑе процеÑÑÑ‹ на (локальном) порту TELNET.
+.SH ОГРÐÐИЧЕÐИЯ
+ПроцеÑÑÑ‹, обращающиеÑÑ Ðº одному файлу или файловой ÑиÑтеме неÑколько раз
+одним и тем же ÑпоÑобом, выводÑÑ‚ÑÑ Ð¾Ð´Ð½Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð¾.
+.PP
+ЕÑли в командной Ñтроке один объект указываетÑÑ Ð½ÐµÑколько раз, то некоторые
+из Ñтих Ñлементов могут игнорироватьÑÑ.
+.PP
+\fBfuser\fP может Ñобирать некоторую информацию только Ð¸Ð¼ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ
+права. Ð’ чаÑтноÑти, открытые процеÑÑами файлы, принадлежащие другим
+пользователÑм, могут не поÑвитьÑÑ, а иÑполнÑемые файлы могут быть отнеÑены
+только к отображённым.
+.PP
+\fBfuser\fP не может Ñообщить о процеÑÑах, еÑли не имеет прав поиÑка в таблице
+файловых деÑкрипторов. Чаще вÑего Ñта проблема возникает при поиÑке Ñокетов
+TCP или UDP в Ñлучае, еÑли \fBfuser\fP запуÑкаетÑÑ Ð±ÐµÐ· прав пользователÑ
+root. Ð’ Ñтом Ñлучае \fBfuser\fP Ñообщит, что нет доÑтупа.
+.PP
+УÑтановка \fBfuser\fP как SUID root решит проблему доÑтупа к определённой
+информации, но может быть нежелательна при Ñоблюдении безопаÑноÑти и
+конфиденциальноÑти.
+.PP
+ОблаÑти имён \fBudp\fP, \fBtcp\fP и доменные Ñокеты UNIX не опрашиваютÑÑ, еÑли
+иÑпользуютÑÑ Ñдра Ñтарее верÑии 1.3.78.
+.PP
+ÐžÐ±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñдра показываютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ \fB\-v\fP.
+.PP
+Параметр \fB\-k\fP применим только Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов. ЕÑли пользователем ÑвлÑетÑÑ
+Ñдро, то \fBfuser\fP выводит только Ñовет и ничего не делает.
+.PP
+\fBfuser\fP не видит блочные уÑтройÑтва, Ñмонтированные процеÑÑами в других
+проÑтранÑтвах имён монтированиÑ. Это проиÑходит из\-за того, что ID
+уÑтройÑтва в таблице файловых деÑкрипторов процеÑÑа берётÑÑ Ð¸Ð· проÑтранÑтва
+имён процеÑÑа, а не fuser и они не Ñовпадают.
+.SH ДЕФЕКТЫ
+.PP
+\fBfuser \-m /dev/sgX\fP покажет (или завершит, еÑли указан \fB\-k\fP) вÑе процеÑÑÑ‹,
+даже еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ Ñтого наÑтроенного уÑтройÑтва. Также, Ð´Ð»Ñ Ñтого могут
+быть другие уÑтройÑтва.
+.PP
+При параметре Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ \fB\-m\fP найдутÑÑ Ð²Ñе файлы на том же уÑтройÑтве,
+что и указанный файл, дополнительно укажите параметр \fB\-M\fP, еÑли вы
+подразумевали только точку монтированиÑ.
+.PP
+\fBfuser\fP will not match mapped files, such as a process' shared libraries if
+they are on a \fBbtrfs\fP(5) filesystem due to the device IDs being different
+for \fBstat\fP(2) and \fI/proc/<PID>/maps\fP.
+.SH "СМОТРИТЕ ТÐКЖЕ"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/ru/killall.1 b/man-po/ru/killall.1
new file mode 100644
index 0000000..3ff08a0
--- /dev/null
+++ b/man-po/ru/killall.1
@@ -0,0 +1,124 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH KILLALL 1 2023\-06\-17 psmisc "ПользовательÑкие команды"
+.SH ИМЯ
+killall \- завершает процеÑÑÑ‹ Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ именем
+.SH ОБЗОР
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fIшаблон\fP] [\fB\-e\fP,\fB\ \-\-exact\fP] [\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP \fIPID\fP]
+[\fB\-o\fP,\fB\ \-\-older\-than\fP \fIВРЕМЯ\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP] [\fB\-r\fP,\fB\ \-\-regexp\fP] [\fB\-s\fP,\fB\ \-\-signal\fP \fIСИГÐÐЛ\fP,\ \fB\-\fP\fIСИГÐÐЛ\fP] [\fB\-u\fP,\fB\ \-\-user\fP \fIпользователь\fP] [\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP]
+[\fB\-y\fP,\fB\ \-\-younger\-than\fP \fIВРЕМЯ\fP] [\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\ \-\-version] [\fB\-\-\fP] \fIимÑ\fP …
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH ОПИСÐÐИЕ
+\fBkillall\fP поÑылает Ñигнал вÑем процеÑÑам, выполнÑющим любую указанную
+команду. ЕÑли не указано Ð¸Ð¼Ñ Ñигнала, то иÑпользуетÑÑ SIGTERM.
+.PP
+Signals can be specified either by name (e.g.\& \fB\-HUP\fP or \fB\-SIGHUP\fP) or
+by number (e.g.\& \fB\-1\fP) or by option \fB\-s\fP.
+.PP
+ЕÑли Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ не ÑвлÑетÑÑ Ñ€ÐµÐ³ÑƒÐ»Ñрным выражением (параметр \fB\-r\fP) и
+Ñодержит коÑую черту (\fB/\fP), то процеÑÑÑ‹, выполнÑющие Ñтот определённый
+файл, будут выбраны Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо от их имени.
+.PP
+\fBkillall\fP возвращает код выхода ноль, еÑли был завершён Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один
+процеÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ заданной команды, или, еÑли команды не указаны, Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹
+один процеÑÑ, подошедший под Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð¸Ñка по \fB\-u\fP и \fB\-Z\fP. Ð’ противном
+Ñлучае \fBkillall\fP возвращает ненулевое значение.
+.PP
+ПроцеÑÑ \fBkillall\fP никогда не завершает Ñам ÑÐµÐ±Ñ (но может завершить другие
+процеÑÑÑ‹ \fBkillall\fP).
+.SH ПÐРÐМЕТРЫ
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+Требовать полного ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ñ‡ÐµÐ½ÑŒ длинных имён. ЕÑли Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹
+длиннее чем 15 Ñимволов, то полное Ð¸Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть недоÑтупно (Ñ‚. е., чаÑÑ‚ÑŒ
+затёрлаÑÑŒ). Ð’ Ñтом Ñлучае, \fBkillall\fP завершит вÑе процеÑÑÑ‹, Ñовпадающие по
+первым 15 Ñимволам. С параметром \fB\-e\fP такие Ñлементы не
+обрабатываютÑÑ. \fBkillall\fP выводит Ñообщение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ необработанного
+Ñлемента, еÑли вмеÑте Ñ \fB\-e\fP дополнительно указан параметр \fB\-v\fP.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+Игнорировать региÑÑ‚Ñ€ Ñимволов в именах процеÑÑов.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+Завершить группу процеÑÑа, в которую входит процеÑÑ. Ðа вÑÑŽ группу
+поÑылаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ один Ñигнал завершениÑ, даже еÑли в группе найдено
+неÑколько процеÑÑов.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+Запрашивать подтверждение перед завершением процеÑÑов.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+Показать вÑе извеÑтные имена Ñигналов.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+ИÑкать процеÑÑÑ‹ в том же проÑтранÑтве имён PID что и у PID. По умолчанию
+поиÑк выполнÑетÑÑ Ð¿Ð¾ вÑем проÑтранÑтвам имён.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+ИÑкать процеÑÑÑ‹, Ñтарее (запущенные до) заданного времени. Ð’Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´Ð°Ñ‘Ñ‚ÑÑ Ð²
+виде чиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точки и идентификатора. Идентификаторами могут быть
+s,m,h,d,w,M,y (Ñекунды, минуты, чаÑÑ‹, дни, недели, меÑÑцы и года,
+ÑоответÑтвенно).
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+Ðе Ñообщать, еÑли ни одного процеÑÑа не завершено.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+РаÑÑматривать шаблон имени процеÑÑа как раÑширенное регулÑрное выражение
+POSIX ÑоглаÑно \fBregex\fP(3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fIСИГÐÐЛ\fP"
+ПоÑылать указанный СИГÐÐЛ, а не SIGTERM.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+Завершить процеÑÑÑ‹, принадлежащие указанному пользователю. Имена команд
+необÑзательны.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+УведомлÑÑ‚ÑŒ об уÑпешной отправке Ñигнала.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+Показать информацию о верÑии.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+Ожидать Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов. \fBkillall\fP проверÑет раз в Ñекунду
+ÑущеÑтвование завершаемых процеÑÑов и прекращает работу только еÑли никого
+не оÑталоÑÑŒ.Заметим, что \fBkillall\fP может ждать вечно, еÑли Ñигнал был
+проигнорирован, никак не повлиÑл или еÑли процеÑÑ Ð¾ÑталÑÑ Ð² ÑоÑтоÑнии зомби.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+ИÑкать процеÑÑÑ‹, новее (запущенные поÑле) заданного времени. Ð’Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´Ð°Ñ‘Ñ‚ÑÑ
+в виде чиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точки и идентификатора. Идентификаторами могут быть
+s,m,h,d,w,M,y (Ñекунды, минуты, чаÑÑ‹, дни, недели, меÑÑцы и года,
+ÑоответÑтвенно).
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+Задать контекÑÑ‚ безопаÑноÑти: завершать только процеÑÑÑ‹ Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтом
+безопаÑноÑти, который Ñовпадает Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ шаблоном раÑширенного регулÑрного
+выражениÑ. Ð’ командной Ñтроке должен указыватьÑÑ Ñ€Ð°Ð½ÑŒÑˆÐµ оÑтальных
+параметров. Имена команд необÑзательны.
+.SH ФÐЙЛЫ
+.TP
+/proc
+меÑтонахождение файловой ÑиÑтемы proc
+.SH "ИЗВЕСТÐЫЕ ДЕФЕКТЫ"
+Завершение по указанному файлу работает только Ð´Ð»Ñ Ð¸ÑполнÑемых файлов,
+которые оÑтаютÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼Ð¸ при выполнении, то еÑÑ‚ÑŒ недвоичные иÑполнÑемые
+файлы не могут завершатьÑÑ Ñтим ÑпоÑобом.
+.PP
+Обратите внимание, что ввод \fBkillall\fP \fIимÑ\fP может не привеÑти к желаемому
+дейÑтвиÑм на не Linux ÑиÑтемах, оÑобенно при запуÑке от привилегированного
+пользователÑ.
+.PP
+\fBkillall \-w\fP не понимает, что процеÑÑ Ð¸Ñчез и заменён новым процеÑÑом Ñ Ñ‚ÐµÐ¼
+же PID между опроÑами.
+.PP
+ЕÑли процеÑÑÑ‹ менÑÑŽÑ‚ Ñвои имена, \fBkillall\fP может не найти их.
+.PP
+\fBkillall\fP имеет ограничение на имена, которые могут быть указаны в
+командной Ñтроке. Оно равно размеру unsigned long integer умноженному на
+8. Ð”Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва 32\-битных ÑиÑтем ограничение равно 32, а Ð´Ð»Ñ 64\-битных
+ÑиÑтем, обычно, равно 64.
+.SH "СМОТРИТЕ ТÐКЖЕ"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBregex\fP(3).
diff --git a/man-po/ru/peekfd.1 b/man-po/ru/peekfd.1
new file mode 100644
index 0000000..5157f2a
--- /dev/null
+++ b/man-po/ru/peekfd.1
@@ -0,0 +1,60 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 2021\-12\-01 psmisc "ПользовательÑкие команды"
+.SH ИМЯ
+peekfd \- подглÑдывает в файловые деÑкрипторы выполнÑющихÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов
+.SH ОБЗОР
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-c\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIpid\fP [\fIfd\fP] [\fIfd\fP] …
+.SH ОПИСÐÐИЕ
+\fBpeekfd\fP подключаетÑÑ Ðº выполнÑющемуÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑÑу и перехватывает вÑе чтениÑ
+и запиÑи в файловые деÑкрипторы. Ð’Ñ‹ можете указать номер желаемого файлового
+деÑкриптора или захватить их вÑе.
+.SH ПÐРÐМЕТРЫ
+.IP \-8
+Ðе выполнÑÑ‚ÑŒ конечную обработку читаемых и запиÑываемых байт.
+.IP \-n
+Ðе отображать заголовки, показывающие иÑточник получаемых байт.
+.IP \-c
+Ðаблюдать также за дейÑтвиÑми Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ð¼ файловым деÑкриптором и во вÑех
+новых дочерних процеÑÑах.
+.IP \-d
+УдалÑÑ‚ÑŒ повторÑющиеÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ чтениÑ/запиÑи при выводе. Полезно, еÑли
+обрабатываетÑÑ tty Ñ Ñхо.
+.IP \-v
+ВывеÑти информацию о верÑии.
+.IP \-h
+Показать Ñправку.
+.SH ФÐЙЛЫ
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+Ðе иÑпользуетÑÑ, то полезно пользователю, чтобы найти нужные номера файловых
+деÑкрипторов.
+.SH ОКРУЖЕÐИЕ
+Ðет.
+.SH ДИÐГÐОСТИКÐ
+Ð’ stderr могут выдаватьÑÑ Ñледующие отладочные ÑообщениÑ:
+.TP
+\fBОшибка приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº pid \fP\fI<PID>\fP
+Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при попытке приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº процеÑÑа, вероÑтно
+нужны права root.
+.SH ДЕФЕКТЫ
+ВероÑтно много. Ðе удивлÑйтеÑÑŒ, еÑли отÑлеживаемый процеÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑÑ.
+.SH ÐВТОР
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "СМОТРИТЕ ТÐКЖЕ"
+\fBttysnoop\fP(8)
diff --git a/man-po/ru/prtstat.1 b/man-po/ru/prtstat.1
new file mode 100644
index 0000000..34ee9ba
--- /dev/null
+++ b/man-po/ru/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 2020\-09\-09 psmisc "ПользовательÑкие команды"
+.SH ИМЯ
+prtstat \- выводит ÑтатиÑтику по процеÑÑу
+.SH ОБЗОР
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH ОПИСÐÐИЕ
+\fBprtstat\fP выводит ÑтатиÑтику по указанному процеÑÑу. Эта Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð±ÐµÑ€Ñ‘Ñ‚ÑÑ
+из файла \fB/proc/\fP\fIpid\fP\fB/stat\fP.
+.SH ПÐРÐМЕТРЫ
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+ВывеÑти информацию в необработанном виде.
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+ВывеÑти информацию о верÑии \fBprtstat\fP.
+.SH ФÐЙЛЫ
+.TP
+\fB/proc/\fP\fIpid\fP\fB/stat\fP
+иÑточник информации, который иÑпользует \fBprtstat\fP.
diff --git a/man-po/ru/pslog.1 b/man-po/ru/pslog.1
new file mode 100644
index 0000000..1939205
--- /dev/null
+++ b/man-po/ru/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 2020\-09\-09 Linux\(dq "РуководÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Linux"
+.SH ИМЯ
+pslog \- выводит текущие пути журнала процеÑÑа
+.SH ОБЗОР
+.ad l
+\fBpslog\fP \fIpid\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH ОПИСÐÐИЕ
+Команда \fBpslog\fP выводит текущие рабочие журналы процеÑÑа.
+.SH ПÐРÐМЕТРЫ
+.TP
+\fB\-V\fP
+Показать информацию о верÑии.
+.SH "СМОТРИТЕ ТÐКЖЕ"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH ÐВТОР
+Vito Mule\(cq
+.MT mulevito@gmail.com
+.ME
+напиÑал \fBpslog\fP в 2015
+году. ОтправлÑйте ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках по адреÑу
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/ru/pstree.1 b/man-po/ru/pstree.1
new file mode 100644
index 0000000..f95d048
--- /dev/null
+++ b/man-po/ru/pstree.1
@@ -0,0 +1,140 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 2021\-06\-21 psmisc "ПользовательÑкие команды"
+.SH ИМЯ
+pstree \- показывает дерево процеÑÑов
+.SH ОБЗОР
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIattr\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fIpid\fP,\fB\ \-\-highlight\-pid\ \fP\fIpid\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fIns\fP] [\fB\-p\fP,\fB\ \-\-show\-pids\fP]
+[\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP] [\fB\-u\fP,\fB\ \-\-uid\-changes\fP]
+[\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIpid\fP,\fB\ \fP\fIпользователь\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH ОПИСÐÐИЕ
+\fBpstree\fP показывает выполнÑющиеÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑÑÑ‹ в виде дерева. Корнем дерева
+ÑвлÑетÑÑ \fIpid\fP или \fBinit\fP, еÑли \fIpid\fP не указан. ЕÑли указано имÑ
+пользователÑ, то вÑе показываемые процеÑÑÑ‹ в дереве начинаютÑÑ Ð¾Ñ‚ процеÑÑов,
+принадлежащих Ñтому пользователю.
+.PP
+\fBpstree\fP визуально объединÑет одинаковые ветви, Ð·Ð°ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¸Ñ… в квадратные
+Ñкобки и показывает перед ними количеÑтво повторов, например
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+показываетÑÑ ÐºÐ°Ðº
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+ЕÑли у Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»Ñ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ñ‹ дочерние нити процеÑÑов, то они показываютÑÑ ÐºÐ°Ðº
+Ð¸Ð¼Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑ Ð² фигурных Ñкобках, например
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+ЕÑли \fBpstree\fP вызываетÑÑ ÐºÐ°Ðº \fBpstree.x11\fP, то в конце данных выводитÑÑ
+приглашение пользователю нажать return и программа не завершаетÑÑ Ð¿Ð¾ÐºÐ° Ñтого
+не будет Ñделано. Это полезно, еÑли \fBpstree\fP запуÑкаетÑÑ Ð² xterminal.
+.PP
+Ðекоторые параметры Ñдра или монтированиÑ, такие как параметр \fIhidepid\fP длÑ
+procfs, Ñкрывают информацию Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… процеÑÑов. Ð’ Ñтих ÑитуациÑÑ…
+\fBpstree\fP пытаетÑÑ Ð¿Ð¾Ñтроить дерево без Ñтой информации, Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°Ñ Ð²Ð¼ÐµÑто
+имён процеÑÑов знаки вопроÑа.
+
+.SH ПÐРÐМЕТРЫ
+.IP \fB\-a\fP
+Показывать аргументы командной Ñтроки. ЕÑли ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока процеÑÑа
+затёрлаÑÑŒ, то процеÑÑ Ð¿Ð¾ÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚ÑÑ Ð² Ñкобках. Параметр \fB\-a\fP неÑвно
+отключает Ñжатие процеÑÑов, но не нитей.
+.IP \fB\-A\fP
+ИÑпользовать ASCII\-Ñимволы Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÑ€ÐµÐ²Ð°.
+.IP \fB\-c\fP
+Ðе Ñжимать одинаковые поддеревьÑ. По умолчанию Ð¿Ð¾Ð´Ð´ÐµÑ€ÐµÐ²ÑŒÑ ÑжимаютÑÑ Ð²ÐµÐ·Ð´Ðµ
+где возможно.
+.IP \fB\-C\fP
+РаÑкрашивать имена процеÑÑов по заданному атрибуту. Ð’ наÑтоÑщее времÑ
+\fBpstree\fP поддерживает только значение \fBage\fP, означающее раÑкраÑку по
+возраÑту процеÑÑа. ПроцеÑÑÑ‹ новее 60 Ñекунд выводÑÑ‚ÑÑ Ð·ÐµÐ»Ñ‘Ð½Ñ‹Ð¼Ð¸, новее чаÑа —
+жёлтыми, а оÑтальные краÑными.
+.IP \fB\-g\fP
+Показывать PGID. Идентификаторы групп процеÑÑа показываютÑÑ Ð´ÐµÑÑтичными
+чиÑлами в Ñкобках поÑле каждого имени процеÑÑа. ЕÑли выводÑÑ‚ÑÑ PID и PGID,
+то PID показываютÑÑ Ð¿ÐµÑ€Ð²Ñ‹Ð¼Ð¸.
+.IP \fB\-G\fP
+ИÑпользовать Ñимволы риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¹ от VT100.
+.IP \fB\-h\fP
+ПодÑветить текущий процеÑÑ Ð¸ его предков. Ðичего не проиÑходит, еÑли
+терминал не поддерживает подÑветку или еÑли текущий процеÑÑ Ð¸Ð»Ð¸ его потомки
+не показываютÑÑ Ð² поддереве.
+.IP \fB\-H\fP
+Подобен \fB\-h\fP, но подÑвечиваетÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ процеÑÑ. Ð’ отличии от \fB\-h\fP,
+\fBpstree\fP завершаетÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹, еÑли указан \fB\-H\fP и подÑветка недоÑтупна.
+.IP \fB\-l\fP
+Показывать длинные Ñтроки. По умолчанию, Ñтроки обрезаютÑÑ Ð´Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð·
+переменной Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ COLUMNS или до ширины Ñкрана. ЕÑли ни одно из Ñтого
+недоÑтупно, то по умолчанию иÑпользуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ в 132 колонки.
+.IP \fB\-n\fP
+Сортировать процеÑÑÑ‹ Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ именем Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾ PID, а не по имени
+(чиÑÐ»Ð¾Ð²Ð°Ñ Ñортировка).
+.IP \fB\-N\fP
+Показывать отдельные Ð´ÐµÑ€ÐµÐ²ÑŒÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ облаÑти имён заданного
+типа. ДоÑтупные типы: \fIipc\fP, \fImnt\fP, \fInet\fP, \fIpid\fP, \fItime\fP, \fIuser\fP,
+\fIuts\fP. Обычные пользователи не имеют доÑтупа к информации о процеÑÑах
+других пользователей, поÑтому вывод будет ограниченным.
+.IP \fB\-p\fP
+Показывать идентификаторы пользователей. PID показываетÑÑ Ð´ÐµÑÑтичными
+чиÑлами в Ñкобках поÑле каждого имени процеÑÑа. \fB\-p\fP неÑвно отключает
+Ñжатие.
+.IP \fB\-s\fP
+Показывать родителей указанного процеÑÑа.
+.IP \fB\-S\fP
+Показывать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð±Ð»Ð°Ñтей имён. Подобен \fB\-N\fP, вывод ограничен при
+запуÑке обычным пользователем.
+.IP \fB\-t\fP
+Показывать полные имена нитей, еÑли доÑтупны.
+.IP \fB\-T\fP
+Скрывать нити и показывать только процеÑÑÑ‹.
+.IP \fB\-u\fP
+Показывать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð² пользователей. ЕÑли uid процеÑÑа
+отличаетÑÑ Ð¾Ñ‚ uid его родителÑ, то показываетÑÑ Ð½Ð¾Ð²Ñ‹Ð¹ uid в Ñкобках поÑле
+имени процеÑÑа.
+.IP \fB\-U\fP
+ИÑпользовать Ñимволы риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¹ UTF\-8 (Юникод). Ð’ Linux 1.1\-54 и новее
+режим UTF\-8 включаетÑÑ Ð½Ð° конÑоли командной \fBecho \-e '\033%8'\fP и
+выключаетÑÑ \fBecho \-e '\033%@'\fP.
+.IP \fB\-V\fP
+Показать информацию о верÑии.
+.IP \fB\-Z\fP
+Показывать текущие атрибуты безопаÑноÑти процеÑÑа. Ð”Ð»Ñ ÑиÑтем SELinux
+иÑпользуетÑÑ ÐºÐ¾Ð½Ñ‚ÐµÐºÑÑ‚ безопаÑноÑти.
+.SH ФÐЙЛЫ
+.TP
+/proc
+меÑтонахождение файловой ÑиÑтемы proc
+.SH ДЕФЕКТЫ
+Ðекоторые наборы Ñимволов могут быть неÑовмеÑтимы Ñ Ñимволами VT100.
+.SH "СМОТРИТЕ ТÐКЖЕ"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/man-po/sr.po b/man-po/sr.po
new file mode 100644
index 0000000..09b1f7a
--- /dev/null
+++ b/man-po/sr.po
@@ -0,0 +1,1840 @@
+# Serbian translation for psmisc-man
+# Copyright © 2021 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2021–2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.6-rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2023-02-26 09:15+0100\n"
+"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <(nothing)>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Gtranslator 41.0\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr "02.11.2022."
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "КориÑничке наредбе"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "ÐÐЗИВ"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser – одређује процеÑе кориÑтећи датотеке или прикључнице"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "УВОД"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<размак>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<СИГÐÐл>] ] I<назив> ..."
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "ОПИС"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid ""
+"B<fuser> displays the PIDs of processes using the specified files or file "
+"systems. In the default display mode, each file name is followed by a "
+"letter denoting the type of access:"
+msgstr ""
+"B<fuser> приказује ПИБ-ове процеÑа кориÑтећи наведене датотеке или ÑиÑтеме "
+"датотека. У оÑновном режиму приказа, за Ñваким називом датотеке Ñледи Ñлово "
+"које означава врÑту приÑтупа:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "тренутни директоријум."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "извршна која је покренута."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "отвара датотеку. B<f> је изоÑтављено у оÑновном режиму приказа."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr ""
+"отвара датотеку за пиÑање. B<F> је изоÑтављено у оÑновном режиму приказа."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "корени директоријум."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "м-мапирана датотека или дељена библиотека."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr "Држач меÑта, изоÑтављен у оÑновном режиму приказа."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid ""
+"B<fuser> returns a non-zero return code if none of the specified files is "
+"accessed or in case of a fatal error. If at least one access has been "
+"found, B<fuser> returns zero."
+msgstr ""
+"B<fuser> даје ненулти резултујући код ако није приÑтупљено ниједној од "
+"наведених датотека или у Ñлучају кобне грешке. Ðко је нађен барем један "
+"приÑтуп, B<fuser> враћа нулу."
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid ""
+"In order to look up processes using TCP and UDP sockets, the corresponding "
+"name space has to be selected with the B<-n> option. By default B<fuser> "
+"will look in both IPv6 and IPv4 sockets. To change the default behavior, "
+"use the B<-4> and B<-6> options. The socket(s) can be specified by the "
+"local and remote port, and the remote address. All fields are optional, but "
+"commas in front of missing fields must be present:"
+msgstr ""
+"Да биÑте тражили процеÑе кориÑтећи ТЦП и УДП прикључнице, одговарајући "
+"називни проÑтор треба бити изабран опцијом B<-n>. По оÑнови B<fuser> ће "
+"тражити и у IPv6 и у IPv4 прикључници. Да измените оÑновно понашање, "
+"кориÑтите опције B<-4> и B<-6>. Прикључница може бити наведена локалним и "
+"удаљеним прикључником, и удаљеном адреÑом. Сва поља Ñу изборна, али зарези "
+"иÑпред недоÑтајућих поља морају бити приÑутни:"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid ""
+"Either symbolic or numeric values can be used for IP addresses and port "
+"numbers."
+msgstr ""
+"Или Ñимболичке или бројевне вредноÑти Ñе могу кориÑтити за ИП адреÑе и "
+"бројеве прикључника."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid ""
+"B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr ""
+"B<fuser> шаље Ñамо ПИБ-ове на Ñатндардни излаз, Ñве оÑтало шаље на "
+"Ñтандардну грешку."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "ОПЦИЈЕ"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid ""
+"Show all files specified on the command line. By default, only files that "
+"are accessed by at least one process are shown."
+msgstr ""
+"Приказује Ñве датотеке наведене на линији наредби. По оÑнови, Ñамо датотеке "
+"којима је приÑтупио барем један Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñу приказане."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "ИÑто као опција B<-m>, кориÑти Ñе за ПОСИКС ÑаглаÑноÑÑ‚."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "Ðеприметно занемарена, кориÑти Ñе за ПОСИКС ÑаглаÑноÑÑ‚."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid ""
+"Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, "
+"SIGKILL is sent. An B<fuser> process never kills itself, but may kill other "
+"B<fuser> processes. The effective user ID of the process executing B<fuser> "
+"is set to its real user ID before attempting to kill."
+msgstr ""
+"Убија процеÑе који приÑтупају датотеци. ОÑим ако није измењено Ñа B<-"
+">I<СИГÐÐЛ\\/>, шаље Ñе „SIGKILL“. B<fuser> Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð¸ÐºÐ°Ð´Ð° не убија Ñамог "
+"Ñебе, али може убити друге B<fuser> процеÑе. Стварни ИБ кориÑника процеÑа "
+"који извршава B<fuser> Ñе поÑтавља на његов Ñтварни ИБ кориÑника пре "
+"покушаја убијања."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid ""
+"Ask the user for confirmation before killing a process. This option is "
+"silently ignored if B<-k> is not present too."
+msgstr ""
+"Пита кориÑника за потврду пре убијања процеÑа. Ова опција Ñе неприметно "
+"занемарује ако и B<-k> такође није приÑутна."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid ""
+"For the name space B<file> let all comparisons be based on the inodes of the "
+"specified file(s) and never on the file names even on network based file "
+"systems."
+msgstr ""
+"За називни проÑтор B<file> пушта да Ñе Ñва поређења заÑнивају на и-чворовима "
+"наведене датотеке и никада на називима датотека чак и на ÑиÑтемима датотека "
+"заÑнованим на мрежи."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "ИÑпиÑује Ñве познате називе Ñигнала."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< ÐÐЗИВ >, B<--mount >I<ÐÐЗИВ>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid ""
+"I<NAME> specifies a file on a mounted file system or a block device that is "
+"mounted. All processes accessing files on that file system are listed. If "
+"a directory is specified, it is automatically changed to I<NAME>/ to use any "
+"file system that might be mounted on that directory."
+msgstr ""
+"I<ÐÐЗИВ> наводи датотеку на прикаченом ÑиÑтему датотека или блок уређај који "
+"је прикачен. Сви процеÑи који приÑтупају датотекама на том ÑиÑтему датотека "
+"Ñу иÑпиÑани. Ðко је наведен директоријум, аутоматÑки Ñе мења у „I<ÐÐЗИВ>/“ "
+"да би кориÑтио било који ÑиÑтем датотека који може бити прикачен на том "
+"директоријуму."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid ""
+"Request will be fulfilled only if I<NAME> specifies a mountpoint. This is "
+"an invaluable seat belt which prevents you from killing the machine if "
+"I<NAME> happens to not be a filesystem."
+msgstr ""
+"Захтев ће бити иÑпуњен Ñамо ако I<ÐÐЗИВ> наводи тачку качења. Ово је "
+"непроцењиви ÑигурноÑни Ð¿Ð¾Ñ˜Ð°Ñ ÐºÐ¾Ñ˜Ð¸ Ð²Ð°Ñ Ñпречава да убијете рачунар ако Ñе "
+"деÑи да I<ÐÐЗИВ> није ÑиÑтем датотека."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid ""
+"Kill only processes which have write access. This option is silently "
+"ignored if B<-k> is not present too."
+msgstr ""
+"Убија Ñамо процеÑе који имају приÑтуп пиÑања. Ова опција је неприметно "
+"занемарена ако B<-k> такође није приÑутна."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< ÐÐЗИВÐИ_ПРОСТОР>, B<--namespace >I<ÐÐЗИВÐИ_ПРОСТОР>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid ""
+"Select a different name space. The name spaces B<file> (file names, the "
+"default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are "
+"supported. For ports, either the port number or the symbolic name can be "
+"specified. If there is no ambiguity, the shortcut notation I<name>B</"
+">I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr ""
+"Бира другачији називни проÑтор. Ðазивни проÑтори B<датотека> (називи "
+"датотека, оÑновно), B<удп> (локални УДП прикључници), и B<тцп> (локални ТЦП "
+"прикључници) Ñу подржани. За прикључнике, може бити наведен или број "
+"прикључника или Ñимболички назив. Ðко нема нејаÑноће, Ð·Ð°Ð¿Ð¸Ñ Ð¿Ñ€ÐµÑ‡Ð¸Ñ†Ðµ "
+"I<назив>B</>I<проÑтор> (нпр., I<80>B</>I<tcp>) Ñе може кориÑтити."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid ""
+"Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not "
+"be used with B<-s>."
+msgstr ""
+"Тиха радња. B<-u> и B<-v> Ñу занемарене у овом режиму. B<-a> Ñе не може "
+"кориÑтити Ñа B<-s>."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<СИГÐÐЛ>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid ""
+"Use the specified signal instead of SIGKILL when killing processes. Signals "
+"can be specified either by name (e.g., B<-HUP>) or by number (e.g., "
+"B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr ""
+"КориÑти наведени Ñигнал умеÑто „SIGKILL“ приликом убијања процеÑа. Сигнали "
+"могу бити наведени или према називу (нпр., B<-HUP>) или према броју (нпр., "
+"B<-1>). Ова опција Ñе неприметно занемарује ако Ñе опција B<-k> не кориÑти."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "Додаје кориÑничко име влаÑника процеÑа Ñваком ПИБ-у."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid ""
+"Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, "
+"USER and COMMAND are similar to B<ps>. ACCESS shows how the process "
+"accesses the file. Verbose mode will also show when a particular file is "
+"being accessed as a mount point, knfs export or swap file. In this case "
+"B<kernel> is shown instead of the PID."
+msgstr ""
+"Опширан режим. ПроцеÑи Ñе приказују у B<ps>-Ñличном Ñтили. Поља ПИБ, "
+"КОРИСÐИК и ÐÐРЕДБРÑу Ñлична Ñа B<ps>. ПРИСТУП показује Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ñ€Ð¸Ñтупа "
+"датотеци. Режим опширноÑти биће такође приказан када Ñе поÑебној датотеци "
+"приÑтупи као тачки качења, „knfs“ извозу или разменÑкој датотеци. У том "
+"Ñлучају B<kernel> Ñе приказује умеÑто ПИБ-а."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "Приказује информације о издању."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid ""
+"Search only for IPv4 sockets. This option must not be used with the B<-6> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"Тражи Ñамо ИПи4 прикључнице. Ова опција Ñе не Ñме кориÑтити Ñа опцијом B<-6> "
+"и има дејÑтва Ñамо Ñа тцп и удп називним проÑторима."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid ""
+"Search only for IPv6 sockets. This option must not be used with the B<-4> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"Тражи Ñамо ИПи6 прикључнице. Ова опција Ñе не Ñме кориÑтити Ñа опцијом B<-4> "
+"и има дејÑтва Ñамо Ñа тцп и удп називним проÑторима."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "ДÐТОТЕКЕ"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "меÑто „proc“ ÑиÑтема датотека"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "ПРИМЕРИ"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr ""
+"убија Ñве процеÑе приÑтупајући /личној_фаÑцикли ÑиÑтема датотека у Ñваком "
+"Ñлучају."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<наредба>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "призива I<наредбу> ако ниједан други Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ кориÑти „/dev/ttyS1“."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "приказује Ñве процеÑе на (локалном) „TELNET“ прикључнику."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "ОГРÐÐИЧЕЊÐ"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid ""
+"Processes accessing the same file or file system several times in the same "
+"way are only shown once."
+msgstr ""
+"ПроцеÑи који приÑтупају иÑтој датотеци или ÑиÑтему датотека више пута на "
+"иÑти начин Ñе приказују Ñамо једном."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid ""
+"If the same object is specified several times on the command line, some of "
+"those entries may be ignored."
+msgstr ""
+"Ðко је иÑти објекат наведен више пута на линији наредби, неки од тих уноÑа "
+"Ñе могу занемарити."
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid ""
+"B<fuser> may only be able to gather partial information unless run with "
+"privileges. As a consequence, files opened by processes belonging to other "
+"users may not be listed and executables may be classified as mapped only."
+msgstr ""
+"B<fuser> може бити у могућноÑти да прикупи делимичне информације Ñамо ако Ñе "
+"покреће Ñа привилегијама. Као поÑледица тога, датотеке које Ñу отворили "
+"процеÑи који припадају другим кориÑницима можда неће бити на ÑпиÑку, а "
+"извршне датотеке могу бити клаÑификоване Ñамо као мапиране."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid ""
+"B<fuser> cannot report on any processes that it doesn't have permission to "
+"look at the file descriptor table for. The most common time this problem "
+"occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-"
+"root user. In this case B<fuser> will report no access."
+msgstr ""
+"B<fuser> не може извештавати ни о једном процеÑу за који нема дозволу да "
+"прегледа табелу опиÑника датотеке. Овај проблем Ñе најчешће јавља када Ñе "
+"траже ТЦП или УДП прикљчнице када Ñе B<fuser> покрене као кориÑник који није "
+"админиÑтратор. У овом Ñлучају B<fuser> неће пријавити приÑтуп."
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid ""
+"Installing B<fuser> SUID root will avoid problems associated with partial "
+"information, but may be undesirable for security and privacy reasons."
+msgstr ""
+"ИнÑталирање B<fuser> СУИБ-а корена ће избећи проблеме повезане Ñа делимичним "
+"информацијама, али може бити непожељно из разлога безбедноÑти и приватноÑти."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid ""
+"B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched "
+"with kernels older than 1.3.78."
+msgstr ""
+"B<udp> и B<tcp> називни проÑтори, и прикључнице ЈУÐИКС домена Ñе не могу "
+"претраживати језгрима Ñтаријим од 1.3.78."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "ПриÑтупи језгром Ñе приказују Ñамо опцијом B<-v>."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid ""
+"The B<-k> option only works on processes. If the user is the kernel, "
+"B<fuser> will print an advice, but take no action beyond that."
+msgstr ""
+"Опција B<-k> ради Ñамо на процеÑима. Ðко је кориÑник језгро, B<fuser> ће "
+"иÑпиÑати Ñавет, али неће преузети никакву радњу након тога."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid ""
+"B<fuser> will not see block devices mounted by processes in a different "
+"mount namespace. This is due to the device ID shown in the process' file "
+"descriptor table being from the process namespace, not fuser's; meaning it "
+"won't match."
+msgstr ""
+"B<fuser> неће видети блок уређаје прикачене процеÑима на различитим називним "
+"проÑторима качења. Ово је зато што је ИД уређаја приказан у табели опиÑника "
+"датотеке процеÑа из називног проÑтора процеÑа, не из „fuser“-а; значење Ñе "
+"неће поклопити."
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "ГРЕШКЕ"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid ""
+"B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, "
+"even if you don't have that device configured. There may be other devices "
+"it does this for too."
+msgstr ""
+"B<fuser -m /dev/sgX> ће приказати (или убити опцијом B<-k>) Ñве процеÑе, чак "
+"и ако ниÑте подеÑили тај уређај. Могу поÑтојати други уређаји који то такође "
+"раде."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid ""
+"The mount B<-m> option will match any file within the same device as the "
+"specified file, use the B<-M> option as well if you mean to specify only the "
+"mount point."
+msgstr ""
+"Опција качења B<-m> поклопиће било коју датотеку у иÑтом уређају као "
+"наведену датотеку, кориÑтите опцију B<-M> ако желите да наведете Ñамо тачку "
+"качења."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid ""
+"B<fuser> will not match mapped files, such as a process' shared libraries if "
+"they are on a B<btrfs>(5) filesystem due to the device IDs being different "
+"for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "ВИДИТЕ ТÐКОЂЕ"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+#, fuzzy
+#| msgid ""
+#| "B<kill>(1), B<killall>(1), B<lsof>(8), B<mount_namespaces>(7), "
+#| "B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgid ""
+"B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), "
+"B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr ""
+"B<kill>(1), B<killall>(1), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), "
+"B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "УБИЈ_СВЕ"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, fuzzy, no-wrap
+#| msgid "2021-06-21"
+msgid "2023-06-17"
+msgstr "21.06.2021."
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall – убија процеÑе по називу"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid ""
+"B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --"
+"user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<name> ..."
+msgstr ""
+"B<killall> [B<-Z>,B<\\ --context> I<образац>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<ПИД>] "
+"[B<-o>,B<\\ --older-than> I<ВРЕМЕ>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<СИГÐÐЛ>,\\ B<->I<СИГÐÐЛ>] [B<-u>,B<\\ --"
+"user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<ВРЕМЕ>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<назив> ..."
+
+#. type: Plain text
+#: ../doc/killall.1:41
+#, fuzzy
+#| msgid "B<killall> B<-V>,B<\\ --version>"
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid ""
+"B<killall> sends a signal to all processes running any of the specified "
+"commands. If no signal name is specified, SIGTERM is sent."
+msgstr ""
+"B<killall> шаље Ñигнал Ñвим процеÑима који обављају било коју од наведених "
+"наредби. Ðко није наведен ниједан назив Ñигнала, шаље Ñе „SIGTERM“."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+#, fuzzy
+#| msgid ""
+#| "Signals can be specified either by name (e.g. B<-HUP> or B<-SIGHUP>) or "
+#| "by number (e.g. B<-1>) or by option B<-s>."
+msgid ""
+"Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or "
+"by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr ""
+"Сигнали могу бити наведени или према називу (нпр. B<-HUP> или B<-SIGHUP>) "
+"или према броју (нпр. B<-1>) или опцијом B<-s>."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid ""
+"If the command name is not regular expression (option B<-r>) and contains a "
+"slash (B</>), processes executing that particular file will be selected for "
+"killing, independent of their name."
+msgstr ""
+"Ðко назив наредбе није регуларни израз (опција B<-r>) и Ñадржи коÑу црту "
+"(B</>), процеÑи који извршавају ту поÑебну датотеку биће изабрани за "
+"убијање, незавиÑно од њиховог назива."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid ""
+"B<killall> returns a zero return code if at least one process has been "
+"killed for each listed command, or no commands were listed and at least one "
+"process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-"
+"zero otherwise."
+msgstr ""
+"B<killall> даје нулу као резултирајући код ако је барем један Ð¿Ñ€Ð¾Ñ†ÐµÑ ÑƒÐ±Ð¸Ñ˜ÐµÐ½ "
+"за Ñваку иÑпиÑану наредбу, или није иÑпиÑана ниједна наредба а барем један "
+"Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° B<-u> и B<-Z> критеријуму претраге. B<killall> даје не-нулу "
+"у Ñупротном."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid ""
+"A B<killall> process never kills itself (but may kill other B<killall> "
+"processes)."
+msgstr ""
+"ÐŸÑ€Ð¾Ñ†ÐµÑ B<killall> никада не убија Ñамог Ñебе (али може убити друге "
+"B<killall> процеÑе)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid ""
+"Require an exact match for very long names. If a command name is longer "
+"than 15 characters, the full name may be unavailable (i.e. it is swapped "
+"out). In this case, B<killall> will kill everything that matches within the "
+"first 15 characters. With B<-e>, such entries are skipped. B<killall> "
+"prints a message for each skipped entry if B<-v> is specified in addition to "
+"B<-e>."
+msgstr ""
+"Захтева тачно подударање за врло дуге називе. Ðко је назив наредбе дужи од "
+"15 знакова, пун назив можда неће бити доÑтупан (тј. замењен је). У овом "
+"Ñлучају, B<killall> ће убити Ñве што Ñе подудара Ñа првих 15 знакова. Са B<-"
+"e>, такви уноÑи Ñе преÑкачу. B<killall> иÑпиÑује поруку за Ñваки преÑкочени "
+"ÑƒÐ½Ð¾Ñ Ð°ÐºÐ¾ је B<-v> наведена поред B<-e>."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "Одрађује покапање назива процеÑа без разликовања величине Ñлова."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid ""
+"Kill the process group to which the process belongs. The kill signal is "
+"only sent once per group, even if multiple processes belonging to the same "
+"process group were found."
+msgstr ""
+"Убија групу процеÑа којој Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ñ€Ð¸Ð¿Ð°Ð´Ð°. Сигнал убијања шаље Ñе Ñамо једном "
+"по групи, чак и ако је пронађено више процеÑа који припадају иÑтој групи "
+"процеÑа."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "МеђудејÑтвено пита за потврду пре убијања."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid ""
+"Match against the PID namespace of the given PID. The default is to match "
+"against all namespaces."
+msgstr ""
+"Упоређује Ñа називним проÑтором ПИБ-а датог ПИБ-а. ОÑновно је да упоређује "
+"Ñа Ñвим називним проÑторима."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid ""
+"Match only processes that are older (started before) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr ""
+"Упоређује Ñамо процеÑе који Ñу Ñтарији (започети пре) наведеног времена. "
+"Време је назначено као вредноÑÑ‚ Ñа покретним зарезом а затим јединица. "
+"Јединице Ñу „s,m,h,d,w,M,y“ за Ñекунде, минуте, Ñате, дане, недеље, меÑеце и "
+"године."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "Ðе жали Ñе ако није убијен ниједан процеÑ."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid ""
+"Interpret process name pattern as a POSIX extended regular expression, per "
+"B<regex>(3)."
+msgstr ""
+"Тумачи шаблон назива процеÑа као проширени регуларни израз ПОСИКСÐ, за "
+"B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<СИГÐÐЛ>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "Шаље овај Ñигнал умеÑто „SIGTERM“-а."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid ""
+"Kill only processes the specified user owns. Command names are optional."
+msgstr ""
+"Убија Ñамо процеÑе које поÑедује наведени кориÑник. Ðазиви наредби Ñу "
+"изборни."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "Извештава ако је Ñигнал уÑпешно поÑлат."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid ""
+"Wait for all killed processes to die. B<killall> checks once per second if "
+"any of the killed processes still exist and only returns if none are left. "
+"Note that B<killall> may wait forever if the signal was ignored, had no "
+"effect, or if the process stays in zombie state."
+msgstr ""
+"Чека да Ñви убијени процеÑи умру. B<killall> проверава једном у Ñекунди да "
+"ли неки од убијених процеÑа и даље поÑтоји и резултира Ñамо ако ниједан није "
+"оÑтао. Знајте да B<killall> може да чека заувек ако је Ñигнал занемарен, "
+"није деловао или ако Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¾Ñтане у зомби Ñтању."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid ""
+"Match only processes that are younger (started after) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr ""
+"Упоређује Ñамо процеÑе који Ñу млађи (започети након) наведеног времена. "
+"Време је назначено као вредноÑÑ‚ Ñа покретним зарезом а затим јединица. "
+"Јединице Ñу „s,m,h,d,w,M,y“ за Ñекунде, минуте, Ñате, дане, недеље, меÑеце и "
+"године."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid ""
+"Specify security context: kill only processes having security context that "
+"match with given extended regular expression pattern. Must precede other "
+"arguments on the command line. Command names are optional."
+msgstr ""
+"Ðаводи контекÑÑ‚ безбедноÑти: убија Ñамо процеÑе који имају контекÑÑ‚ "
+"безбедноÑти који Ñе подударају Ñа датим шаблоном проширеног регуларног "
+"израза. Мора да претходи оÑталим аргументима на линији наредби. Ðазиви "
+"наредби ниÑу обавезни."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "ПОЗÐÐТЕ ГРЕШКЕ"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid ""
+"Killing by file only works for executables that are kept open during "
+"execution, i.e. impure executables can't be killed this way."
+msgstr ""
+"Убијање по датотеци ради Ñамо за извршне које Ñу оÑтале отворене за време "
+"изврашавање, тј. нечиÑте извршне Ñе не могу убити на овај начин."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid ""
+"Be warned that typing B<killall> I<name> may not have the desired effect on "
+"non-Linux systems, especially when done by a privileged user."
+msgstr ""
+"Знајте да упиÑивање B<killall> I<назив> не може имати жељеног дејÑтва на не-"
+"Ð›Ð¸Ð½ÑƒÐºÑ ÑиÑтемима, нарочито када Ñе ради Ñа привилегованим кориÑником."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid ""
+"B<killall -w> doesn't detect if a process disappears and is replaced by a "
+"new process with the same PID between scans."
+msgstr ""
+"B<killall -w> не открива ако Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½ÐµÑтане и буде замењен новим процеÑом Ñа "
+"иÑтим ПИБ-ом између претраживања."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid ""
+"If processes change their name, B<killall> may not be able to match them "
+"correctly."
+msgstr ""
+"Ðко процеÑи промене Ñвоје називе, B<killall> не може бити у могућноÑти да их "
+"иÑправно упореди."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid ""
+"B<killall> has a limit of names that can be specified on the command line. "
+"This figure is the size of an unsigned long integer multiplied by 8. For "
+"most 32 bit systems the limit is 32 and similarly for a 64 bit system the "
+"limit is usually 64."
+msgstr ""
+"B<killall> има ограничење назива који Ñе могу навеÑти на линији наредби. Ова "
+"бројка је величина великог целог броја без знака помножена Ñа 8. За већину "
+"32-битних ÑиÑтема ограничење је 32, а Ñлично за 64-битни ÑиÑтем ограничење "
+"је обично 64."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+msgstr ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "01.12.2021."
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr "peekfd – вири у опиÑнике датотека радних процеÑа"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<пид> [I<од>] [I<од>] ..."
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid ""
+"B<peekfd> attaches to a running process and intercepts all reads and writes "
+"to file descriptors. You can specify the desired file descriptor numbers or "
+"dump all of them."
+msgstr ""
+"B<peekfd> Ñе каћи за радни Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ преÑреће Ñва читања и пиÑања у опиÑнике "
+"датотека. Можете одредити жељене бројеве опиÑника датотека или их Ñве "
+"избацити."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr "Ðе обавља поÑтобраду на бајтовима који Ñе читају или запиÑују."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr "Ðе приказује заглавља која означавају извор избачених бајтова."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid ""
+"Also dump the requested file descriptor activity in any new child processes "
+"that are created."
+msgstr ""
+"Такође избацује активноÑÑ‚ захтеваног опиÑника датотеке у било ком изрођеном "
+"процеÑу који је Ñтворен."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid ""
+"Remove duplicate read/writes from the output. If you're looking at a tty "
+"with echo, you might want this."
+msgstr ""
+"Уклања удвоÑтручена читања/запиÑивања из излаза. Ðко гледате у конзолу Ñа "
+"ехом, можда ћете желети ово."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "Приказује ниÑку издања."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "Приказује поруку помоћи."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid ""
+"Not used but useful for the user to look at to get good file descriptor "
+"numbers."
+msgstr ""
+"Ðе кориÑти Ñе али је кориÑно кориÑнику да погледа да добави добре бројеве "
+"опиÑника датотека."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "ОКРУЖЕЊЕ"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "Ðишта."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "ДИЈÐГÐОСТИКÐ"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr "Следећа дијагноÑтика Ñе може појавити на Ñтандардној грешки:"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Грешка прикачињања на пиб >I<E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid ""
+"An unknown error occurred while attempted to attach to a process, you may "
+"need to be root."
+msgstr ""
+"Ðепозната грешка која Ñе догодила приликом покушаја прикачињања процеÑу, "
+"морате бити админиÑтратор."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid ""
+"Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr ""
+"Вероватно много. Ðемојте Ñе изненадити ако Ð¿Ñ€Ð¾Ñ†ÐµÑ ÐºÐ¾Ñ˜Ð¸ надгледате оконча."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "ÐУТОР"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Трент Вадингтон E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "09.09.2020."
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "ЛинукÑ\""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "КориÑничко упутÑтво ЛинукÑа"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog – извештава о тренутној путањи дневника процеÑа"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<pid> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr "Ðаредба B<pslog> извештава о тренутном радном дневнику процеÑа."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. "
+"Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr ""
+"Вито Муле\\(cq E<.MT mulevito@gmail.com> E<.ME> је напиÑао B<pslog> 2015. "
+"Извештаје о грешкама пошаљите на E<.MT mulevito@gmail.com> E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat – иÑпиÑује ÑтатиÑтику процеÑа"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid ""
+"B<prtstat> prints the statistics of the specified process. This information "
+"comes from the B</proc/>I<pid>B</stat> file."
+msgstr ""
+"B<prtstat> иÑпиÑује ÑтатиÑтику наведног процеÑа. Ова информација долази из "
+"датотеке B</proc/>I<pid>B</stat>."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "ИÑпиÑује информације у Ñировом формату."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "Приказује информације о издању за B<prtstat>."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<pid>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "извор информација које кориÑти B<prtstat>."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "21.06.2021."
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree – приказује Ñтабло процеÑа"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-"
+"n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<атрб>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<пид>] [B<-l>,B<\\ --long>] [B<-"
+"n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<пид>,B<\\ >I<кориÑник>]"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid ""
+"B<pstree> shows running processes as a tree. The tree is rooted at either "
+"I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all "
+"process trees rooted at processes owned by that user are shown."
+msgstr ""
+"B<pstree> приказује радне процеÑе као Ñтабло. Стабло је укорењено или на "
+"I<пиб> или B<init> ако је I<пиб> изоÑтављен. Ðко је наведено име кориÑника, "
+"Ñва Ñтабла процеÑа Ñа кореном у процеÑима које поÑедује тај кориÑник биће "
+"приказана."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid ""
+"B<pstree> visually merges identical branches by putting them in square "
+"brackets and prefixing them with the repetition count, e.g."
+msgstr ""
+"B<pstree> видљиво Ñтапа иÑтоветне гране Ñтављајући их у Ñредње заграде и "
+"додајући им Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÑƒÐºÑƒÐ¿Ð½Ð¾Ñти понављања, нпр."
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "поÑтаје"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid ""
+"Child threads of a process are found under the parent process and are shown "
+"with the process name in curly braces, e.g."
+msgstr ""
+"Ðити порода процеÑа Ñе налазе под родитељÑким процеÑом и приказују Ñе Ñа "
+"називом процеÑа у великим заградама, нпр."
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid ""
+"If B<pstree> is called as B<pstree.x11> then it will prompt the user at the "
+"end of the line to press return and will not return until that has "
+"happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr ""
+"Ðко је B<pstree> позван као B<pstree.x11>, тада ће на крају реда затражити "
+"од кориÑника да притиÑне „УнеÑи“ и неће дати резултат док Ñе то не догоди. "
+"Ово је кориÑно када је B<pstree> покренут у Ñ…-терминалу."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid ""
+"Certain kernel or mount parameters, such as the I<hidepid> option for "
+"procfs, will hide information for some processes. In these situations "
+"B<pstree> will attempt to build the tree without this information, showing "
+"process names as question marks."
+msgstr ""
+"Одређени параметри језгра или качења, као што је опција I<hidepid> за "
+"„procfs“, Ñакриће информације о неким процеÑима. У тим Ñитуацијама B<pstree> "
+"ће покушати да изгради Ñтабло без ових информација, приказујући називе "
+"процеÑа као знаке упитника."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid ""
+"Show command line arguments. If the command line of a process is swapped "
+"out, that process is shown in parentheses. B<-a> implicitly disables "
+"compaction for processes but not threads."
+msgstr ""
+"Приказује аргументе линије наредби. Ðко Ñе линија наредби процеÑа замени, "
+"тај Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ приказан у заградама. B<-a> изричито онемогућава Ñабијање за "
+"процеÑе, али не и нити."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "КориÑти ÐСКРИ знакове за иÑцртавање Ñтабла."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid ""
+"Disable compaction of identical subtrees. By default, subtrees are "
+"compacted whenever possible."
+msgstr ""
+"Онемогућава збијање иÑтоветних подÑтабала. По оÑнови, подÑтабла Ñе Ñабијају "
+"кад год је то могуће."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid ""
+"Color the process name by given attribute. Currently B<pstree> only accepts "
+"the value B<age> which colors by process age. Processes newer than 60 "
+"seconds are green, newer than an hour yellow and the remaining red."
+msgstr ""
+"Боји назив процеÑа датим атрибутом. Тренутно B<pstree> прихвата Ñамо "
+"вредноÑÑ‚ B<age> која обојава према ÑтароÑти процеÑа. ПроцеÑи новији од 60 "
+"Ñекунди Ñу зелени, новији од једног Ñата Ñу жути, а преоÑтали Ñу црвени."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid ""
+"Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses "
+"after each process name. If both PIDs and PGIDs are displayed then PIDs are "
+"shown first."
+msgstr ""
+"Приказује ПГИД-ое. ИД-ови група процеÑа Ñу приказани као децимални бројеви у "
+"заградама након Ñваког назива процеÑа. Ðко Ñу приказани и ПИД-ови и ПГИД-"
+"ови, тада Ñе прво приказују ПИД-ови."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "КориÑти знакове иÑцртавања „VT100“ линије."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid ""
+"Highlight the current process and its ancestors. This is a no-op if the "
+"terminal doesn't support highlighting or if neither the current process nor "
+"any of its ancestors are in the subtree being shown."
+msgstr ""
+"ИÑтиче тренутни Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ његове претходнике. Ово није опција ако терминал не "
+"подржава иÑтицање или ако ни тренутни Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð¸ било који од његових "
+"претходника ниÑу у приказаном подÑтаблу."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid ""
+"Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, "
+"B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr ""
+"Као B<-h>, али умеÑто тога иÑтиче наведени процеÑ. Супротно од B<-h>, "
+"B<pstree> не уÑпева када Ñе корÑити B<-H> када иÑтицање није доÑтупно."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid ""
+"Display long lines. By default, lines are truncated to either the COLUMNS "
+"environment variable or the display width. If neither of these methods "
+"work, the default of 132 columns is used."
+msgstr ""
+"Приказује дуге редове. По оÑнови, редови Ñе Ñкраћују или на променљиву "
+"окружења КОЛОÐЕ или на ширину приказа. Ðко ниједна од ових метода не "
+"функционише, кориÑте Ñе 132 колоне по оÑнови."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid ""
+"Sort processes with the same parent by PID instead of by name. (Numeric "
+"sort.)"
+msgstr ""
+"Ређа процеÑе Ñа иÑтим почетним према ПИБ-у умеÑто према називу. (Бројевно "
+"ређање.)"
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid ""
+"Show individual trees for each namespace of the type specified. The "
+"available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, "
+"I<uts>. Regular users don't have access to other users' processes "
+"information, so the output will be limited."
+msgstr ""
+"Приказује појединачна Ñтабла за Ñваки називни прозор наведене врÑте: I<ipc>, "
+"I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Обични кориÑници немају "
+"приÑтуп информацијама процеÑа других кориÑника, тако да ће излаз бити "
+"ограничен."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid ""
+"Show PIDs. PIDs are shown as decimal numbers in parentheses after each "
+"process name. B<-p> implicitly disables compaction."
+msgstr ""
+"Приказује ПИБ-ове. ПИБ-ови Ñе приказују као децимални бројеви у заградама "
+"након Ñваког назива процеÑа. B<-p> изричито онемогућава збијање."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "Показује полазне процеÑе наведеног процеÑа."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid ""
+"Show namespaces transitions. Like B<-N>, the output is limited when running "
+"as a regular user."
+msgstr ""
+"Приказује прелазе проÑторних назива. Коа B<-N>, излаз је ограничен када "
+"радите као обичан кориÑник."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "Приказује пуне називе за нити када Ñу доÑтупни."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "Скрива нити и приказује Ñамо процеÑе."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid ""
+"Show uid transitions. Whenever the uid of a process differs from the uid of "
+"its parent, the new uid is shown in parentheses after the process name."
+msgstr ""
+"Приказује прелазе уиб-а. Гад год Ñе уиб процеÑа разликује од уиб-а Ñвог "
+"родитеља, тада Ñе нови уиб приказује у заградама након назива процеÑа."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid ""
+"Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, "
+"UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with "
+"B<echo -e '\\033%@'>."
+msgstr ""
+"КориÑти УТФ-8 (Јуникод) знакове иÑцртавања. Под ЛинукÑом 1.1-54 и новијим, "
+"УТФ-8 режиму Ñе приÑтупа на конзоли опцијом B<echo -e '\\033%8'> и напушта "
+"Ñа B<echo -e '\\033%@'>."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid ""
+"Show the current security attributes of the process. For SELinux systems "
+"this will be the security context."
+msgstr ""
+"Приказује текуће атрибуте безбедноÑти процеÑа. За Ð¡Ð•Ð›Ð¸Ð½ÑƒÐºÑ ÑиÑтеме ово ће "
+"бити безбедноÑни контекÑÑ‚."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "Ðеки Ñкупови знакова могу бити неÑаглаÑни Ñа „VT100“ знаковима."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
+
+#, no-wrap
+#~ msgid "2021-01-11"
+#~ msgstr "11.01.2021."
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
+
+#~ msgid "B<->"
+#~ msgstr "B<->"
+
+#~ msgid "Reset all options and set the signal back to SIGKILL."
+#~ msgstr "Враћа Ñве опције и поÑтавља Ñигнал назад на „SIGKILL“."
+
+#~ msgid ""
+#~ "(SELinux) Show security context for each process. This flag will only "
+#~ "work if B<pstree> is compiled with SELinux support."
+#~ msgstr ""
+#~ "(СЕЛинукÑ) Приказује контекÑÑ‚ безбедноÑти за Ñваки процеÑ. Ова опција ће "
+#~ "радити Ñамо ако је B<pstree> преведено Ñа Ð¡Ð•Ð›Ð¸Ð½ÑƒÐºÑ Ð¿Ð¾Ð´Ñ€ÑˆÐºÐ¾Ð¼."
diff --git a/man-po/sr/fuser.1 b/man-po/sr/fuser.1
new file mode 100644
index 0000000..9cc162f
--- /dev/null
+++ b/man-po/sr/fuser.1
@@ -0,0 +1,220 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 02.11.2022. psmisc "КориÑничке наредбе"
+.SH ÐÐЗИВ
+fuser – одређује процеÑе кориÑтећи датотеке или прикључнице
+.SH УВОД
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP \fIразмак\fP]
+[\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fIСИГÐÐл\fP] ] \fIназив\fP ...
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH ОПИС
+\fBfuser\fP приказује ПИБ\-ове процеÑа кориÑтећи наведене датотеке или ÑиÑтеме
+датотека. У оÑновном режиму приказа, за Ñваким називом датотеке Ñледи Ñлово
+које означава врÑту приÑтупа:
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+тренутни директоријум.
+.TP
+\fBe\fP
+извршна која је покренута.
+.TP
+\fBf\fP
+отвара датотеку. \fBf\fP је изоÑтављено у оÑновном режиму приказа.
+.TP
+\fBF\fP
+отвара датотеку за пиÑање. \fBF\fP је изоÑтављено у оÑновном режиму приказа.
+.TP
+\fBr\fP
+корени директоријум.
+.TP
+\fBm\fP
+м\-мапирана датотека или дељена библиотека.
+.TP
+\&\fB.\fP
+Држач меÑта, изоÑтављен у оÑновном режиму приказа.
+.PD
+.RE
+.LP
+\fBfuser\fP даје ненулти резултујући код ако није приÑтупљено ниједној од
+наведених датотека или у Ñлучају кобне грешке. Ðко је нађен барем један
+приÑтуп, \fBfuser\fP враћа нулу.
+.PP
+Да биÑте тражили процеÑе кориÑтећи ТЦП и УДП прикључнице, одговарајући
+називни проÑтор треба бити изабран опцијом \fB\-n\fP. По оÑнови \fBfuser\fP ће
+тражити и у IPv6 и у IPv4 прикључници. Да измените оÑновно понашање,
+кориÑтите опције \fB\-4\fP и \fB\-6\fP. Прикључница може бити наведена локалним и
+удаљеним прикључником, и удаљеном адреÑом. Сва поља Ñу изборна, али зарези
+иÑпред недоÑтајућих поља морају бити приÑутни:
+.PP
+[\fIlcl_port\fP][,[\fIrmt_host\fP][,[\fIrmt_port\fP]]]
+.PP
+Или Ñимболичке или бројевне вредноÑти Ñе могу кориÑтити за ИП адреÑе и
+бројеве прикључника.
+.PP
+\fBfuser\fP шаље Ñамо ПИБ\-ове на Ñатндардни излаз, Ñве оÑтало шаље на
+Ñтандардну грешку.
+.SH ОПЦИЈЕ
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+Приказује Ñве датотеке наведене на линији наредби. По оÑнови, Ñамо датотеке
+којима је приÑтупио барем један Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñу приказане.
+.TP
+\fB\-c\fP
+ИÑто као опција \fB\-m\fP, кориÑти Ñе за ПОСИКС ÑаглаÑноÑÑ‚.
+.TP
+\fB\-f\fP
+Ðеприметно занемарена, кориÑти Ñе за ПОСИКС ÑаглаÑноÑÑ‚.
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+Убија процеÑе који приÑтупају датотеци. ОÑим ако није измењено Ñа
+\fB\-\fP\fIСИГÐÐЛ\/\fP, шаље Ñе „SIGKILL“. \fBfuser\fP Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð¸ÐºÐ°Ð´Ð° не убија Ñамог
+Ñебе, али може убити друге \fBfuser\fP процеÑе. Стварни ИБ кориÑника процеÑа
+који извршава \fBfuser\fP Ñе поÑтавља на његов Ñтварни ИБ кориÑника пре
+покушаја убијања.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+Пита кориÑника за потврду пре убијања процеÑа. Ова опција Ñе неприметно
+занемарује ако и \fB\-k\fP такође није приÑутна.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+За називни проÑтор \fBfile\fP пушта да Ñе Ñва поређења заÑнивају на и\-чворовима
+наведене датотеке и никада на називима датотека чак и на ÑиÑтемима датотека
+заÑнованим на мрежи.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+ИÑпиÑује Ñве познате називе Ñигнала.
+.TP
+\fB\-m\fP\fI ÐÐЗИВ \fP, \fB\-\-mount \fP\fIÐÐЗИВ\fP
+\fIÐÐЗИВ\fP наводи датотеку на прикаченом ÑиÑтему датотека или блок уређај који
+је прикачен. Сви процеÑи који приÑтупају датотекама на том ÑиÑтему датотека
+Ñу иÑпиÑани. Ðко је наведен директоријум, аутоматÑки Ñе мења у „\fIÐÐЗИВ\fP/“
+да би кориÑтио било који ÑиÑтем датотека који може бити прикачен на том
+директоријуму.
+.TP
+\fB\-M\fP, \fB\-\-ismountpoint\fP
+Захтев ће бити иÑпуњен Ñамо ако \fIÐÐЗИВ\fP наводи тачку качења. Ово је
+непроцењиви ÑигурноÑни Ð¿Ð¾Ñ˜Ð°Ñ ÐºÐ¾Ñ˜Ð¸ Ð²Ð°Ñ Ñпречава да убијете рачунар ако Ñе
+деÑи да \fIÐÐЗИВ\fP није ÑиÑтем датотека.
+.TP
+\fB\-w\fP
+Убија Ñамо процеÑе који имају приÑтуп пиÑања. Ова опција је неприметно
+занемарена ако \fB\-k\fP такође није приÑутна.
+.TP
+\fB\-n\fP\fI ÐÐЗИВÐИ_ПРОСТОР\fP, \fB\-\-namespace \fP\fIÐÐЗИВÐИ_ПРОСТОР\fP
+Бира другачији називни проÑтор. Ðазивни проÑтори \fBдатотека\fP (називи
+датотека, оÑновно), \fBудп\fP (локални УДП прикључници), и \fBтцп\fP (локални ТЦП
+прикључници) Ñу подржани. За прикључнике, може бити наведен или број
+прикључника или Ñимболички назив. Ðко нема нејаÑноће, Ð·Ð°Ð¿Ð¸Ñ Ð¿Ñ€ÐµÑ‡Ð¸Ñ†Ðµ
+\fIназив\fP\fB/\fP\fIпроÑтор\fP (нпр., \fI80\fP\fB/\fP\fItcp\fP) Ñе може кориÑтити.
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+Тиха радња. \fB\-u\fP и \fB\-v\fP Ñу занемарене у овом режиму. \fB\-a\fP Ñе не може
+кориÑтити Ñа \fB\-s\fP.
+.TP
+\fB\-\fP\fIСИГÐÐЛ\fP
+КориÑти наведени Ñигнал умеÑто „SIGKILL“ приликом убијања процеÑа. Сигнали
+могу бити наведени или према називу (нпр., \fB\-HUP\fP) или према броју (нпр.,
+\fB\-1\fP). Ова опција Ñе неприметно занемарује ако Ñе опција \fB\-k\fP не кориÑти.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+Додаје кориÑничко име влаÑника процеÑа Ñваком ПИБ\-у.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+Опширан режим. ПроцеÑи Ñе приказују у \fBps\fP\-Ñличном Ñтили. Поља ПИБ,
+КОРИСÐИК и ÐÐРЕДБРÑу Ñлична Ñа \fBps\fP. ПРИСТУП показује Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ñ€Ð¸Ñтупа
+датотеци. Режим опширноÑти биће такође приказан када Ñе поÑебној датотеци
+приÑтупи као тачки качења, „knfs“ извозу или разменÑкој датотеци. У том
+Ñлучају \fBkernel\fP Ñе приказује умеÑто ПИБ\-а.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Приказује информације о издању.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+Тражи Ñамо ИПи4 прикључнице. Ова опција Ñе не Ñме кориÑтити Ñа опцијом \fB\-6\fP
+и има дејÑтва Ñамо Ñа тцп и удп називним проÑторима.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+Тражи Ñамо ИПи6 прикључнице. Ова опција Ñе не Ñме кориÑтити Ñа опцијом \fB\-4\fP
+и има дејÑтва Ñамо Ñа тцп и удп називним проÑторима.
+.SH ДÐТОТЕКЕ
+.TP
+/proc
+меÑто „proc“ ÑиÑтема датотека
+.SH ПРИМЕРИ
+.TP
+\fBfuser \-km /home\fP
+убија Ñве процеÑе приÑтупајући /личној_фаÑцикли ÑиÑтема датотека у Ñваком
+Ñлучају.
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fIнаредба\fP\fB; fi\fP
+призива \fIнаредбу\fP ако ниједан други Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ кориÑти „/dev/ttyS1“.
+.TP
+\fBfuser telnet/tcp\fP
+приказује Ñве процеÑе на (локалном) „TELNET“ прикључнику.
+.SH ОГРÐÐИЧЕЊÐ
+ПроцеÑи који приÑтупају иÑтој датотеци или ÑиÑтему датотека више пута на
+иÑти начин Ñе приказују Ñамо једном.
+.PP
+Ðко је иÑти објекат наведен више пута на линији наредби, неки од тих уноÑа
+Ñе могу занемарити.
+.PP
+\fBfuser\fP може бити у могућноÑти да прикупи делимичне информације Ñамо ако Ñе
+покреће Ñа привилегијама. Као поÑледица тога, датотеке које Ñу отворили
+процеÑи који припадају другим кориÑницима можда неће бити на ÑпиÑку, а
+извршне датотеке могу бити клаÑификоване Ñамо као мапиране.
+.PP
+\fBfuser\fP не може извештавати ни о једном процеÑу за који нема дозволу да
+прегледа табелу опиÑника датотеке. Овај проблем Ñе најчешће јавља када Ñе
+траже ТЦП или УДП прикљчнице када Ñе \fBfuser\fP покрене као кориÑник који није
+админиÑтратор. У овом Ñлучају \fBfuser\fP неће пријавити приÑтуп.
+.PP
+ИнÑталирање \fBfuser\fP СУИБ\-а корена ће избећи проблеме повезане Ñа делимичним
+информацијама, али може бити непожељно из разлога безбедноÑти и приватноÑти.
+.PP
+\fBudp\fP и \fBtcp\fP називни проÑтори, и прикључнице ЈУÐИКС домена Ñе не могу
+претраживати језгрима Ñтаријим од 1.3.78.
+.PP
+ПриÑтупи језгром Ñе приказују Ñамо опцијом \fB\-v\fP.
+.PP
+Опција \fB\-k\fP ради Ñамо на процеÑима. Ðко је кориÑник језгро, \fBfuser\fP ће
+иÑпиÑати Ñавет, али неће преузети никакву радњу након тога.
+.PP
+\fBfuser\fP неће видети блок уређаје прикачене процеÑима на различитим називним
+проÑторима качења. Ово је зато што је ИД уређаја приказан у табели опиÑника
+датотеке процеÑа из називног проÑтора процеÑа, не из „fuser“\-а; значење Ñе
+неће поклопити.
+.SH ГРЕШКЕ
+.PP
+\fBfuser \-m /dev/sgX\fP ће приказати (или убити опцијом \fB\-k\fP) Ñве процеÑе, чак
+и ако ниÑте подеÑили тај уређај. Могу поÑтојати други уређаји који то такође
+раде.
+.PP
+Опција качења \fB\-m\fP поклопиће било коју датотеку у иÑтом уређају као
+наведену датотеку, кориÑтите опцију \fB\-M\fP ако желите да наведете Ñамо тачку
+качења.
+.PP
+\fBfuser\fP will not match mapped files, such as a process' shared libraries if
+they are on a \fBbtrfs\fP(5) filesystem due to the device IDs being different
+for \fBstat\fP(2) and \fI/proc/<PID>/maps\fP.
+.SH "ВИДИТЕ ТÐКОЂЕ"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/sr/killall.1 b/man-po/sr/killall.1
new file mode 100644
index 0000000..bc5bd38
--- /dev/null
+++ b/man-po/sr/killall.1
@@ -0,0 +1,122 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH УБИЈ_СВЕ 1 2023\-06\-17 psmisc "КориÑничке наредбе"
+.SH ÐÐЗИВ
+killall – убија процеÑе по називу
+.SH УВОД
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fIобразац\fP] [\fB\-e\fP,\fB\ \-\-exact\fP] [\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP \fIПИД\fP]
+[\fB\-o\fP,\fB\ \-\-older\-than\fP \fIВРЕМЕ\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP] [\fB\-r\fP,\fB\ \-\-regexp\fP] [\fB\-s\fP,\fB\ \-\-signal\fP \fIСИГÐÐЛ\fP,\ \fB\-\fP\fIСИГÐÐЛ\fP] [\fB\-u\fP,\fB\ \-\-user\fP \fIuser\fP] [\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP] [\fB\-y\fP,\fB\ \-\-younger\-than\fP \fIВРЕМЕ\fP] [\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\fB\ \-\-version\fP]
+[\fB\-\-\fP] \fIназив\fP ...
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH ОПИС
+\fBkillall\fP шаље Ñигнал Ñвим процеÑима који обављају било коју од наведених
+наредби. Ðко није наведен ниједан назив Ñигнала, шаље Ñе „SIGTERM“.
+.PP
+Signals can be specified either by name (e.g.\& \fB\-HUP\fP or \fB\-SIGHUP\fP) or
+by number (e.g.\& \fB\-1\fP) or by option \fB\-s\fP.
+.PP
+Ðко назив наредбе није регуларни израз (опција \fB\-r\fP) и Ñадржи коÑу црту
+(\fB/\fP), процеÑи који извршавају ту поÑебну датотеку биће изабрани за
+убијање, незавиÑно од њиховог назива.
+.PP
+\fBkillall\fP даје нулу као резултирајући код ако је барем један Ð¿Ñ€Ð¾Ñ†ÐµÑ ÑƒÐ±Ð¸Ñ˜ÐµÐ½
+за Ñваку иÑпиÑану наредбу, или није иÑпиÑана ниједна наредба а барем један
+Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ€Ð° \fB\-u\fP и \fB\-Z\fP критеријуму претраге. \fBkillall\fP даје не\-нулу
+у Ñупротном.
+.PP
+ÐŸÑ€Ð¾Ñ†ÐµÑ \fBkillall\fP никада не убија Ñамог Ñебе (али може убити друге
+\fBkillall\fP процеÑе).
+.SH ОПЦИЈЕ
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+Захтева тачно подударање за врло дуге називе. Ðко је назив наредбе дужи од
+15 знакова, пун назив можда неће бити доÑтупан (тј. замењен је). У овом
+Ñлучају, \fBkillall\fP ће убити Ñве што Ñе подудара Ñа првих 15 знакова. Са
+\fB\-e\fP, такви уноÑи Ñе преÑкачу. \fBkillall\fP иÑпиÑује поруку за Ñваки
+преÑкочени ÑƒÐ½Ð¾Ñ Ð°ÐºÐ¾ је \fB\-v\fP наведена поред \fB\-e\fP.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+Одрађује покапање назива процеÑа без разликовања величине Ñлова.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+Убија групу процеÑа којој Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ñ€Ð¸Ð¿Ð°Ð´Ð°. Сигнал убијања шаље Ñе Ñамо једном
+по групи, чак и ако је пронађено више процеÑа који припадају иÑтој групи
+процеÑа.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+МеђудејÑтвено пита за потврду пре убијања.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+ИÑпиÑује Ñве познате називе Ñигнала.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+Упоређује Ñа називним проÑтором ПИБ\-а датог ПИБ\-а. ОÑновно је да упоређује
+Ñа Ñвим називним проÑторима.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+Упоређује Ñамо процеÑе који Ñу Ñтарији (започети пре) наведеног
+времена. Време је назначено као вредноÑÑ‚ Ñа покретним зарезом а затим
+јединица. Јединице Ñу „s,m,h,d,w,M,y“ за Ñекунде, минуте, Ñате, дане,
+недеље, меÑеце и године.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+Ðе жали Ñе ако није убијен ниједан процеÑ.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+Тумачи шаблон назива процеÑа као проширени регуларни израз ПОСИКСÐ, за
+\fBregex\fP(3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fIСИГÐÐЛ\fP"
+Шаље овај Ñигнал умеÑто „SIGTERM“\-а.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+Убија Ñамо процеÑе које поÑедује наведени кориÑник. Ðазиви наредби Ñу
+изборни.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+Извештава ако је Ñигнал уÑпешно поÑлат.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+Приказује информације о издању.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+Чека да Ñви убијени процеÑи умру. \fBkillall\fP проверава једном у Ñекунди да
+ли неки од убијених процеÑа и даље поÑтоји и резултира Ñамо ако ниједан није
+оÑтао. Знајте да \fBkillall\fP може да чека заувек ако је Ñигнал занемарен,
+није деловао или ако Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¾Ñтане у зомби Ñтању.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+Упоређује Ñамо процеÑе који Ñу млађи (започети након) наведеног
+времена. Време је назначено као вредноÑÑ‚ Ñа покретним зарезом а затим
+јединица. Јединице Ñу „s,m,h,d,w,M,y“ за Ñекунде, минуте, Ñате, дане,
+недеље, меÑеце и године.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+Ðаводи контекÑÑ‚ безбедноÑти: убија Ñамо процеÑе који имају контекÑÑ‚
+безбедноÑти који Ñе подударају Ñа датим шаблоном проширеног регуларног
+израза. Мора да претходи оÑталим аргументима на линији наредби. Ðазиви
+наредби ниÑу обавезни.
+.SH ДÐТОТЕКЕ
+.TP
+/proc
+меÑто „proc“ ÑиÑтема датотека
+.SH "ПОЗÐÐТЕ ГРЕШКЕ"
+Убијање по датотеци ради Ñамо за извршне које Ñу оÑтале отворене за време
+изврашавање, тј. нечиÑте извршне Ñе не могу убити на овај начин.
+.PP
+Знајте да упиÑивање \fBkillall\fP \fIназив\fP не може имати жељеног дејÑтва на
+не\-Ð›Ð¸Ð½ÑƒÐºÑ ÑиÑтемима, нарочито када Ñе ради Ñа привилегованим кориÑником.
+.PP
+\fBkillall \-w\fP не открива ако Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½ÐµÑтане и буде замењен новим процеÑом Ñа
+иÑтим ПИБ\-ом између претраживања.
+.PP
+Ðко процеÑи промене Ñвоје називе, \fBkillall\fP не може бити у могућноÑти да их
+иÑправно упореди.
+.PP
+\fBkillall\fP има ограничење назива који Ñе могу навеÑти на линији наредби. Ова
+бројка је величина великог целог броја без знака помножена Ñа 8. За већину
+32\-битних ÑиÑтема ограничење је 32, а Ñлично за 64\-битни ÑиÑтем ограничење
+је обично 64.
+.SH "ВИДИТЕ ТÐКОЂЕ"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBregex\fP(3).
diff --git a/man-po/sr/peekfd.1 b/man-po/sr/peekfd.1
new file mode 100644
index 0000000..ecbdf5c
--- /dev/null
+++ b/man-po/sr/peekfd.1
@@ -0,0 +1,60 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 01.12.2021. psmisc "КориÑничке наредбе"
+.SH ÐÐЗИВ
+peekfd – вири у опиÑнике датотека радних процеÑа
+.SH УВОД
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-c\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIпид\fP [\fIод\fP] [\fIод\fP] ...
+.SH ОПИС
+\fBpeekfd\fP Ñе каћи за радни Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ преÑреће Ñва читања и пиÑања у опиÑнике
+датотека. Можете одредити жељене бројеве опиÑника датотека или их Ñве
+избацити.
+.SH ОПЦИЈЕ
+.IP \-8
+Ðе обавља поÑтобраду на бајтовима који Ñе читају или запиÑују.
+.IP \-n
+Ðе приказује заглавља која означавају извор избачених бајтова.
+.IP \-c
+Такође избацује активноÑÑ‚ захтеваног опиÑника датотеке у било ком изрођеном
+процеÑу који је Ñтворен.
+.IP \-d
+Уклања удвоÑтручена читања/запиÑивања из излаза. Ðко гледате у конзолу Ñа
+ехом, можда ћете желети ово.
+.IP \-v
+Приказује ниÑку издања.
+.IP \-h
+Приказује поруку помоћи.
+.SH ДÐТОТЕКЕ
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+Ðе кориÑти Ñе али је кориÑно кориÑнику да погледа да добави добре бројеве
+опиÑника датотека.
+.SH ОКРУЖЕЊЕ
+Ðишта.
+.SH ДИЈÐГÐОСТИКÐ
+Следећа дијагноÑтика Ñе може појавити на Ñтандардној грешки:
+.TP
+\fBГрешка прикачињања на пиб \fP\fI<PID>\fP
+Ðепозната грешка која Ñе догодила приликом покушаја прикачињања процеÑу,
+морате бити админиÑтратор.
+.SH ГРЕШКЕ
+Вероватно много. Ðемојте Ñе изненадити ако Ð¿Ñ€Ð¾Ñ†ÐµÑ ÐºÐ¾Ñ˜Ð¸ надгледате оконча.
+.SH ÐУТОР
+.MT trent.waddington@gmail.com
+Трент Вадингтон
+.ME
+.SH "ВИДИТЕ ТÐКОЂЕ"
+\fBttysnoop\fP(8)
diff --git a/man-po/sr/prtstat.1 b/man-po/sr/prtstat.1
new file mode 100644
index 0000000..1f9cec2
--- /dev/null
+++ b/man-po/sr/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 09.09.2020. psmisc "КориÑничке наредбе"
+.SH ÐÐЗИВ
+prtstat – иÑпиÑује ÑтатиÑтику процеÑа
+.SH УВОД
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH ОПИС
+\fBprtstat\fP иÑпиÑује ÑтатиÑтику наведног процеÑа. Ова информација долази из
+датотеке \fB/proc/\fP\fIpid\fP\fB/stat\fP.
+.SH ОПЦИЈЕ
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+ИÑпиÑује информације у Ñировом формату.
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+Приказује информације о издању за \fBprtstat\fP.
+.SH ДÐТОТЕКЕ
+.TP
+\fB/proc/\fP\fIpid\fP\fB/stat\fP
+извор информација које кориÑти \fBprtstat\fP.
diff --git a/man-po/sr/pslog.1 b/man-po/sr/pslog.1
new file mode 100644
index 0000000..23c94ad
--- /dev/null
+++ b/man-po/sr/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 09.09.2020. ЛинукÑ\(dq "КориÑничко упутÑтво ЛинукÑа"
+.SH ÐÐЗИВ
+pslog – извештава о тренутној путањи дневника процеÑа
+.SH УВОД
+.ad l
+\fBpslog\fP \fIpid\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH ОПИС
+Ðаредба \fBpslog\fP извештава о тренутном радном дневнику процеÑа.
+.SH ОПЦИЈЕ
+.TP
+\fB\-V\fP
+Приказује информације о издању.
+.SH "ВИДИТЕ ТÐКОЂЕ"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH ÐУТОР
+Вито Муле\(cq
+.MT mulevito@gmail.com
+.ME
+је напиÑао \fBpslog\fP
+2015. Извештаје о грешкама пошаљите на
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/sr/pstree.1 b/man-po/sr/pstree.1
new file mode 100644
index 0000000..b781209
--- /dev/null
+++ b/man-po/sr/pstree.1
@@ -0,0 +1,137 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 21.06.2021. psmisc "КориÑничке наредбе"
+.SH ÐÐЗИВ
+pstree – приказује Ñтабло процеÑа
+.SH УВОД
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIатрб\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fI\ pid\fP,\fB\ \-\-highlight\-pid\ \fP\fIпид\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fIns\fP] [\fB\-p\fP,\fB\ \-\-show\-pids\fP]
+[\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP] [\fB\-u\fP,\fB\ \-\-uid\-changes\fP]
+[\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIпид\fP,\fB\ \fP\fIкориÑник\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH ОПИС
+\fBpstree\fP приказује радне процеÑе као Ñтабло. Стабло је укорењено или на
+\fIпиб\fP или \fBinit\fP ако је \fIпиб\fP изоÑтављен. Ðко је наведено име кориÑника,
+Ñва Ñтабла процеÑа Ñа кореном у процеÑима које поÑедује тај кориÑник биће
+приказана.
+.PP
+\fBpstree\fP видљиво Ñтапа иÑтоветне гране Ñтављајући их у Ñредње заграде и
+додајући им Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÑƒÐºÑƒÐ¿Ð½Ð¾Ñти понављања, нпр.
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+поÑтаје
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+Ðити порода процеÑа Ñе налазе под родитељÑким процеÑом и приказују Ñе Ñа
+називом процеÑа у великим заградама, нпр.
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+Ðко је \fBpstree\fP позван као \fBpstree.x11\fP, тада ће на крају реда затражити
+од кориÑника да притиÑне „УнеÑи“ и неће дати резултат док Ñе то не
+догоди. Ово је кориÑно када је \fBpstree\fP покренут у Ñ…\-терминалу.
+.PP
+Одређени параметри језгра или качења, као што је опција \fIhidepid\fP за
+„procfs“, Ñакриће информације о неким процеÑима. У тим Ñитуацијама \fBpstree\fP
+ће покушати да изгради Ñтабло без ових информација, приказујући називе
+процеÑа као знаке упитника.
+
+.SH ОПЦИЈЕ
+.IP \fB\-a\fP
+Приказује аргументе линије наредби. Ðко Ñе линија наредби процеÑа замени,
+тај Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ приказан у заградама. \fB\-a\fP изричито онемогућава Ñабијање за
+процеÑе, али не и нити.
+.IP \fB\-A\fP
+КориÑти ÐСКРИ знакове за иÑцртавање Ñтабла.
+.IP \fB\-c\fP
+Онемогућава збијање иÑтоветних подÑтабала. По оÑнови, подÑтабла Ñе Ñабијају
+кад год је то могуће.
+.IP \fB\-C\fP
+Боји назив процеÑа датим атрибутом. Тренутно \fBpstree\fP прихвата Ñамо
+вредноÑÑ‚ \fBage\fP која обојава према ÑтароÑти процеÑа. ПроцеÑи новији од 60
+Ñекунди Ñу зелени, новији од једног Ñата Ñу жути, а преоÑтали Ñу црвени.
+.IP \fB\-g\fP
+Приказује ПГИД\-ое. ИД\-ови група процеÑа Ñу приказани као децимални бројеви у
+заградама након Ñваког назива процеÑа. Ðко Ñу приказани и ПИД\-ови и
+ПГИД\-ови, тада Ñе прво приказују ПИД\-ови.
+.IP \fB\-G\fP
+КориÑти знакове иÑцртавања „VT100“ линије.
+.IP \fB\-h\fP
+ИÑтиче тренутни Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ његове претходнике. Ово није опција ако терминал не
+подржава иÑтицање или ако ни тренутни Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð¸ било који од његових
+претходника ниÑу у приказаном подÑтаблу.
+.IP \fB\-H\fP
+Као \fB\-h\fP, али умеÑто тога иÑтиче наведени процеÑ. Супротно од \fB\-h\fP,
+\fBpstree\fP не уÑпева када Ñе корÑити \fB\-H\fP када иÑтицање није доÑтупно.
+.IP \fB\-l\fP
+Приказује дуге редове. По оÑнови, редови Ñе Ñкраћују или на променљиву
+окружења КОЛОÐЕ или на ширину приказа. Ðко ниједна од ових метода не
+функционише, кориÑте Ñе 132 колоне по оÑнови.
+.IP \fB\-n\fP
+Ређа процеÑе Ñа иÑтим почетним према ПИБ\-у умеÑто према називу. (Бројевно
+ређање.)
+.IP \fB\-N\fP
+Приказује појединачна Ñтабла за Ñваки називни прозор наведене врÑте: \fIipc\fP,
+\fImnt\fP, \fInet\fP, \fIpid\fP, \fItime\fP, \fIuser\fP, \fIuts\fP. Обични кориÑници немају
+приÑтуп информацијама процеÑа других кориÑника, тако да ће излаз бити
+ограничен.
+.IP \fB\-p\fP
+Приказује ПИБ\-ове. ПИБ\-ови Ñе приказују као децимални бројеви у заградама
+након Ñваког назива процеÑа. \fB\-p\fP изричито онемогућава збијање.
+.IP \fB\-s\fP
+Показује полазне процеÑе наведеног процеÑа.
+.IP \fB\-S\fP
+Приказује прелазе проÑторних назива. Коа \fB\-N\fP, излаз је ограничен када
+радите као обичан кориÑник.
+.IP \fB\-t\fP
+Приказује пуне називе за нити када Ñу доÑтупни.
+.IP \fB\-T\fP
+Скрива нити и приказује Ñамо процеÑе.
+.IP \fB\-u\fP
+Приказује прелазе уиб\-а. Гад год Ñе уиб процеÑа разликује од уиб\-а Ñвог
+родитеља, тада Ñе нови уиб приказује у заградама након назива процеÑа.
+.IP \fB\-U\fP
+КориÑти УТФ\-8 (Јуникод) знакове иÑцртавања. Под ЛинукÑом 1.1\-54 и новијим,
+УТФ\-8 режиму Ñе приÑтупа на конзоли опцијом \fBecho \-e '\033%8'\fP и напушта Ñа
+\fBecho \-e '\033%@'\fP.
+.IP \fB\-V\fP
+Приказује информације о издању.
+.IP \fB\-Z\fP
+Приказује текуће атрибуте безбедноÑти процеÑа. За Ð¡Ð•Ð›Ð¸Ð½ÑƒÐºÑ ÑиÑтеме ово ће
+бити безбедноÑни контекÑÑ‚.
+.SH ДÐТОТЕКЕ
+.TP
+/proc
+меÑто „proc“ ÑиÑтема датотека
+.SH ГРЕШКЕ
+Ðеки Ñкупови знакова могу бити неÑаглаÑни Ñа „VT100“ знаковима.
+.SH "ВИДИТЕ ТÐКОЂЕ"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/man-po/sv.po b/man-po/sv.po
new file mode 100644
index 0000000..b947ec0
--- /dev/null
+++ b/man-po/sv.po
@@ -0,0 +1,1830 @@
+# Swedish language file for psmisc-man.
+# Copyright © 2022 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Sebastian Rasmussen <sebras@gmail.com>, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.6-rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2022-12-09 01:25+0100\n"
+"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr "2022-11-02"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "Användarkommandon"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "NAMN"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser - identifiera processer som använder filer eller uttag"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "SYNOPSIS"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] "
+"[B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr ""
+"B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> "
+"I<utrymme>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<namn> ..."
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "BESKRIVNING"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid ""
+"B<fuser> displays the PIDs of processes using the specified files or file "
+"systems. In the default display mode, each file name is followed by a "
+"letter denoting the type of access:"
+msgstr ""
+"B<fuser> visar PID:arna för processor som använder den angivna filerna eller "
+"filsystemen. I standardvisningsläge kommer varje filnamn att åtföljas av en "
+"bokstav som visar typen av åtkomst:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "aktuell katalog."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "körbar fil körs."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "fil öppen. B<f> utelämnas i standardvisningsläge."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr "öppen för skrivning. B<F> utelämnas i standardvisningsläge."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "rotkatalog."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "mmap:pad fil eller delat bibliotek."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr "Platshållare, utelämnas i standardvisningsläge."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid ""
+"B<fuser> returns a non-zero return code if none of the specified files is "
+"accessed or in case of a fatal error. If at least one access has been "
+"found, B<fuser> returns zero."
+msgstr ""
+"B<fuser> returnerar en returkod som inte är noll om ingen av de angivna "
+"filerna används eller vid ett fatalt fel. Om åtminstone en åtkomst hittats "
+"kommer B<fuser> att returnera noll."
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid ""
+"In order to look up processes using TCP and UDP sockets, the corresponding "
+"name space has to be selected with the B<-n> option. By default B<fuser> "
+"will look in both IPv6 and IPv4 sockets. To change the default behavior, "
+"use the B<-4> and B<-6> options. The socket(s) can be specified by the "
+"local and remote port, and the remote address. All fields are optional, but "
+"commas in front of missing fields must be present:"
+msgstr ""
+"För att slå upp processer som använder TCP- och UDP-uttag måste motsvarande "
+"namnrymd väljas med flaggan B<-n>. Som standard kommer B<fuser> att leta "
+"bland både IPv6- och IPv4-uttag. För att förändra standardbeteendet, använd "
+"flaggorna B<-4> och B<-6>. Uttagen kan anges antingen efter lokal eller "
+"fjärrport och fjärradressen. Alla fält är valfria, men komman i början av "
+"fält som saknas måste finnas:"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<lkl_port>][,[I<fjr_värd>][,[I<fjr_port>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid ""
+"Either symbolic or numeric values can be used for IP addresses and port "
+"numbers."
+msgstr ""
+"Endera symboliska eller numeriska värden kan användas för IP-adresser och "
+"portnummer."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid ""
+"B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr ""
+"B<fuser> matar endas ut PID:ar till standard ut, allting annat skickas till "
+"standard fel."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "FLAGGOR"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid ""
+"Show all files specified on the command line. By default, only files that "
+"are accessed by at least one process are shown."
+msgstr ""
+"Visa alla filer angivna på kommandoraden. Som standard visas endast filer "
+"som används av åtminstone en process."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "Samma som flaggan B<-m>, används för POSIX-kompatibilitet."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "Ignoreras tyst, används för POSIX-kompatibilitet."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid ""
+"Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, "
+"SIGKILL is sent. An B<fuser> process never kills itself, but may kill other "
+"B<fuser> processes. The effective user ID of the process executing B<fuser> "
+"is set to its real user ID before attempting to kill."
+msgstr ""
+"Döda processer som kommer åt filen. Om det inte ändrats med B<->I<SIGNAL\\/"
+">, så skickas SIGKILL. En B<fuser> process dödar aldrig sig själv, men kan "
+"döda andra B<fuser>-processer. Det effektiva användar-ID:t för processen "
+"som kör B<fuser> sätts till dess riktiga användar-ID innan försök att döda."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid ""
+"Ask the user for confirmation before killing a process. This option is "
+"silently ignored if B<-k> is not present too."
+msgstr ""
+"Fråga användaren om bekräftelse innan en process dödas. Denna flagga "
+"ignoreras tyst om B<-k> saknas."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid ""
+"For the name space B<file> let all comparisons be based on the inodes of the "
+"specified file(s) and never on the file names even on network based file "
+"systems."
+msgstr ""
+"För namnrymden B<file> låt alla jämförelser baseras på inoderna för de "
+"angivna filerna och aldrig på filnamnen, gäller även för nätverksbaserade "
+"filsystem."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "Lista alla kända signaler."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< NAMN>, B<--mount >I<NAMN>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid ""
+"I<NAME> specifies a file on a mounted file system or a block device that is "
+"mounted. All processes accessing files on that file system are listed. If "
+"a directory is specified, it is automatically changed to I<NAME>/ to use any "
+"file system that might be mounted on that directory."
+msgstr ""
+"I<NAMN> anger en fil på ett monterat filsystem eller en blockenhet som är "
+"monterad. Alla processer som använder filer på det filsystemet listas. Om "
+"en katalog inte anges, ändras den automatiskt till I<NAMN>/ för att använda "
+"eventuellt filsystem som monterats på den katalogen."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "the shortcut notation"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid ""
+"Request will be fulfilled only if I<NAME> specifies a mountpoint. This is "
+"an invaluable seat belt which prevents you from killing the machine if "
+"I<NAME> happens to not be a filesystem."
+msgstr ""
+"Begäran kommer att uppfyllas om I<NAMN> anger en monteringspunkt. Detta är "
+"ett ovärderligt säkerhetsbälte vilket förhindrar sig från att döda maskinen "
+"om I<NAMN> inte råkas vara ett filsystem."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid ""
+"Kill only processes which have write access. This option is silently "
+"ignored if B<-k> is not present too."
+msgstr ""
+"Döda endast processer som har skrivåtkomst. Denna flagga ignoreras tyst om "
+"B<-k> saknas."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n>I< NAMNRYMD>, B<--namespace >I<NAMNRYMD>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid ""
+"Select a different name space. The name spaces B<file> (file names, the "
+"default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are "
+"supported. For ports, either the port number or the symbolic name can be "
+"specified. If there is no ambiguity, the shortcut notation I<name>B</"
+">I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr ""
+"Välj en annan namnrymd. Namnrymderna B<file> (filnamn, standardvärdet), "
+"B<udp> (lokala UDP-portar) och B<tcp> (lokala TCP-portar) stöds. För portar "
+"kan antingen portnumret eller det symboliska namnet anges. Om det inte "
+"finns tvetydighet kan kortbeteckningen I<namn>B</>I<rymd> användas (t.ex. "
+"I<80>B</>I<tcp>)."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid ""
+"Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not "
+"be used with B<-s>."
+msgstr ""
+"Tyst läge. B<-u> och B<-v> ignoreras i detta läge. B<-a> kan inte användas "
+"tillsammans med B<-s>."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid ""
+"Use the specified signal instead of SIGKILL when killing processes. Signals "
+"can be specified either by name (e.g., B<-HUP>) or by number (e.g., "
+"B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr ""
+"Använd den angivna signalen istället för SIGKILL då processer dödas. "
+"Signaler kan ange antingen med namn (t.ex. B<-HUP>) eller med nummer (t.ex. "
+"B<-1>). Denna flagga ignoreras tyst om flaggan B<-k> inte används."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "Lägg till användarnamnet för processägaren till varje PID."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid ""
+"Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, "
+"USER and COMMAND are similar to B<ps>. ACCESS shows how the process "
+"accesses the file. Verbose mode will also show when a particular file is "
+"being accessed as a mount point, knfs export or swap file. In this case "
+"B<kernel> is shown instead of the PID."
+msgstr ""
+"Utförligt läge. Processer visas i en B<ps>-liknande stil. Fälten PID, USER "
+"och COMMAND liknar de från B<ps>. ACCESS visar hur processen använder "
+"filen. Utförligt läge kommer också att visa när en särskild fil används som "
+"en monteringspunkt, knfs exportering eller speglingsfil. I detta fall visas "
+"B<kernel> istället för PID:en."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "Visa versionsinformation."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid ""
+"Search only for IPv4 sockets. This option must not be used with the B<-6> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"SökSök endast efter IPv4-uttag. Denna flagga kan inte användas tillsammans "
+"med flaggan B<-6> och påverkar bara tcp- och udp-namnrymderna."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid ""
+"Search only for IPv6 sockets. This option must not be used with the B<-4> "
+"option and only has an effect with the tcp and udp namespaces."
+msgstr ""
+"Sök endast efter IPv6-uttag. Denna flagga kan inte användas tillsammans med "
+"flaggan B<-4> och påverkar bara tcp- och udp-namnrymderna."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "FILER"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "plats för proc-filsystemet"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "EXEMPEL"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr "dödar alla processer som använder filsystemet /home på något sätt."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<kommando>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "kör I<kommando> om inga andra processer använder /dev/ttyS1."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "visar alla processer på den (lokala) TELNET-porten."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "BEGRÄNSNINGAR"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid ""
+"Processes accessing the same file or file system several times in the same "
+"way are only shown once."
+msgstr ""
+"Processer som använder samma fil eller filsystem flera gånger på samma sätt "
+"visas endast en gång."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid ""
+"If the same object is specified several times on the command line, some of "
+"those entries may be ignored."
+msgstr ""
+"Om samma objekt anges flera gånger på kommandoraden, kommer vissa av de "
+"posterna att ignoreras."
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid ""
+"B<fuser> may only be able to gather partial information unless run with "
+"privileges. As a consequence, files opened by processes belonging to other "
+"users may not be listed and executables may be classified as mapped only."
+msgstr ""
+"B<fuser> kanska bara kan samla ihop partiell information om det körs utan "
+"privilegier. Som en konsekvens kanske filer öppnade av processer som "
+"tillhör andra användare inte komma att listas och körbara filer kanske "
+"endast klassificeras som mappade."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid ""
+"B<fuser> cannot report on any processes that it doesn't have permission to "
+"look at the file descriptor table for. The most common time this problem "
+"occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-"
+"root user. In this case B<fuser> will report no access."
+msgstr ""
+"B<fuser> kan inte rapportera processor som det inte har tillåtelse att titta "
+"på fildeskriptortabellen för. Det mest frekventa tillfället då detta "
+"problem uppstår är när man letar efter TCP- eller UDP-uttag och B<fuser> "
+"inte körs som root-användare. I detta fall kommer B<fuser> inte att "
+"rapportera någon användning."
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid ""
+"Installing B<fuser> SUID root will avoid problems associated with partial "
+"information, but may be undesirable for security and privacy reasons."
+msgstr ""
+"Att installera B<fuser> som SUID root kommer att undvika problem associerade "
+"med ofullständig information, men kan vara oönskat av säkerhets- och "
+"sekretesskäl."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid ""
+"B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched "
+"with kernels older than 1.3.78."
+msgstr ""
+"B<udp>- och B<tcp>-namnrymder och UNIX-domänuttag kan inte genomsökas med "
+"kärnor äldre än 1.3.78."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "Åtkomst av kärnan visas endast med flaggan B<-v>."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid ""
+"The B<-k> option only works on processes. If the user is the kernel, "
+"B<fuser> will print an advice, but take no action beyond that."
+msgstr ""
+"Flaggan B<-k> fungerar endast för processer. Om användaren är kärnan kommer "
+"B<fuser> att skriva ut en rekommendation, men inte genomföra någon åtgärd "
+"utöver det."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid ""
+"B<fuser> will not see block devices mounted by processes in a different "
+"mount namespace. This is due to the device ID shown in the process' file "
+"descriptor table being from the process namespace, not fuser's; meaning it "
+"won't match."
+msgstr ""
+"B<fuser> kommer inte att se blockenheter monterade av processer i en annan "
+"monteringsnamnrymd. Detta är på grund av att enhets-ID:t som visas i "
+"processens fildeskriptortabell kommer från processnamnrymden, inte fusers; "
+"vilket innebär att de inte matchar."
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "FEL"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid ""
+"B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, "
+"even if you don't have that device configured. There may be other devices "
+"it does this for too."
+msgstr ""
+"B<fuser -m /dev/sgX> kommer att visa (eller döda med B<-k>-flaggan) alla "
+"processer även om du inte har den enheten konfigurerad. Det kan finnas "
+"ytterligare enheter detta gäller."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid ""
+"The mount B<-m> option will match any file within the same device as the "
+"specified file, use the B<-M> option as well if you mean to specify only the "
+"mount point."
+msgstr ""
+"Monteringsflaggan B<-m> kommer att matcha alla filer inom samma enhet som "
+"den angivna filen, använd även flaggan B<-M> om det endast menar att ange "
+"monteringspunkten."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid ""
+"B<fuser> will not match mapped files, such as a process' shared libraries if "
+"they are on a B<btrfs>(5) filesystem due to the device IDs being different "
+"for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr ""
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "SE VIDARE"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+#, fuzzy
+#| msgid ""
+#| "B<kill>(1), B<killall>(1), B<lsof>(8), B<mount_namespaces>(7), "
+#| "B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgid ""
+"B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), "
+"B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr ""
+"B<kill>(1), B<killall>(1), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), "
+"B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, fuzzy, no-wrap
+#| msgid "2021-06-21"
+msgid "2023-06-17"
+msgstr "2021-06-21"
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall - döda processer efter namn"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid ""
+"B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --"
+"user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --"
+"younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<name> ..."
+msgstr ""
+"B<killall> [B<-Z>,B<\\ --context> I<mönster>] [B<-e>,B<\\ --exact>] [B<-g>,"
+"B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] "
+"[B<-o>,B<\\ --older-than> I<TID>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --"
+"regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --"
+"user> I<användare>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ "
+"--younger-than> I<TID>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] "
+"[B<-->] I<namn> ..."
+
+#. type: Plain text
+#: ../doc/killall.1:41
+#, fuzzy
+#| msgid "B<killall> B<-V>,B<\\ --version>"
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid ""
+"B<killall> sends a signal to all processes running any of the specified "
+"commands. If no signal name is specified, SIGTERM is sent."
+msgstr ""
+"B<killall> skickar en signal till alla processer som kör någon av de angivna "
+"kommandona. Om inget signalnamn anges skickas SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+#, fuzzy
+#| msgid ""
+#| "Signals can be specified either by name (e.g. B<-HUP> or B<-SIGHUP>) or "
+#| "by number (e.g. B<-1>) or by option B<-s>."
+msgid ""
+"Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or "
+"by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr ""
+"Signaler kan anges antingen efter namn (t.ex. B<-HUP> eller B<-SIGHUP>) "
+"eller efter nummer (t.ex. B<-1>) eller efter flagga B<-s>."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid ""
+"If the command name is not regular expression (option B<-r>) and contains a "
+"slash (B</>), processes executing that particular file will be selected for "
+"killing, independent of their name."
+msgstr ""
+"Om kommandonamnet inte är ett reguljärt uttryck (flagga B<-r>) och "
+"innehåller ett snedstreck (B</>) kommer processer som kör den filen att bli "
+"utvalda och dödade, oberoende av deras namn."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid ""
+"B<killall> returns a zero return code if at least one process has been "
+"killed for each listed command, or no commands were listed and at least one "
+"process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-"
+"zero otherwise."
+msgstr ""
+"B<killall> returnerar en returkod som är noll om åtminstone en process har "
+"dödats för varje listat kommando eller om inga kommando listades och "
+"åtminstone en process matchade sökkriterierna B<-u> och B<-Z>. Annars "
+"returnerar B<killall> något annat än noll."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid ""
+"A B<killall> process never kills itself (but may kill other B<killall> "
+"processes)."
+msgstr ""
+"En B<killall>-process dödar aldrig sig själv (men kan döda andra B<killall>-"
+"processer)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid ""
+"Require an exact match for very long names. If a command name is longer "
+"than 15 characters, the full name may be unavailable (i.e. it is swapped "
+"out). In this case, B<killall> will kill everything that matches within the "
+"first 15 characters. With B<-e>, such entries are skipped. B<killall> "
+"prints a message for each skipped entry if B<-v> is specified in addition to "
+"B<-e>."
+msgstr ""
+"Kräver en exakt match för väldigt långa namn. Om ett kommandonamn är längre "
+"än 15 tecken kan det fullständiga namn vara otillgängligt (det kan t.ex. "
+"vara utspeglat). I detta fall kommer B<killall> att döda allting som "
+"matchar de första 15 tecknen. Med B<-e> kommer sådana poster att hoppas "
+"över. B<killall> skriver ut ett meddelandet för varje överhoppad post om B<-"
+"v> anges i kombination med B<-e>."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "Gör namnmatchningen skiftlägesokänslig."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid ""
+"Kill the process group to which the process belongs. The kill signal is "
+"only sent once per group, even if multiple processes belonging to the same "
+"process group were found."
+msgstr ""
+"Döda processgruppen som processen tillhör. Dödssignalen skickas endast en "
+"gång per grupp även om flera processer hittades som hör till samma "
+"processgrupp."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "Fråga interaktivt efter bekräftelse innan dödande."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid ""
+"Match against the PID namespace of the given PID. The default is to match "
+"against all namespaces."
+msgstr ""
+"Matcha mot PID-namnrymden för den angivna PID:en. Standard är att matcha mot "
+"alla namnrymder."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid ""
+"Match only processes that are older (started before) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr ""
+"Matcha endast processer som är äldre (startade innan) den angivna tiden. "
+"Tiden anges som ett flyttal följt av en enhet. Enheterna är s,m,h,d,w,M,y "
+"för sekunder, minuter, timmar, dagar, veckor, månader respektive år."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "Klaga inte om inga processer dödades."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid ""
+"Interpret process name pattern as a POSIX extended regular expression, per "
+"B<regex>(3)."
+msgstr ""
+"Tolka processnamnmönstret som ett POSIX utökat reguljärt uttryck enligt "
+"B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<SIGNAL>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "Skicka denna signal istället för SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid ""
+"Kill only processes the specified user owns. Command names are optional."
+msgstr ""
+"Döda endast processer som den angivna användaren äger. Kommandonamnen är "
+"valfria."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "Rapportera om signalen skickades framgångsrikt."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid ""
+"Wait for all killed processes to die. B<killall> checks once per second if "
+"any of the killed processes still exist and only returns if none are left. "
+"Note that B<killall> may wait forever if the signal was ignored, had no "
+"effect, or if the process stays in zombie state."
+msgstr ""
+"Vänta på att alla dödade processer dör. B<killall> kontrollerar en gång per "
+"sekund om någon av de dödade processerna fortfarande existerar och "
+"returnerar först när ingen finns kvar. Notera att B<killall> kan komma att "
+"vänta för evigt om signalen ignorerats, inte hade någon effekt, eller om "
+"processen förblir i ett zombietillstånd."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid ""
+"Match only processes that are younger (started after) the time specified. "
+"The time is specified as a float then a unit. The units are s,m,h,d,w,M,y "
+"for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr ""
+"Matcha endast processer som är yngre (startade efter) den angivna tiden. "
+"Tiden anges som ett flyttal följt av en enhet. Enheterna är s,m,h,d,w,M,y "
+"för sekunder, minuter, timmar, dagar, veckor, månader respektive år."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid ""
+"Specify security context: kill only processes having security context that "
+"match with given extended regular expression pattern. Must precede other "
+"arguments on the command line. Command names are optional."
+msgstr ""
+"Ange säkerhetskontext: döda endast processer som har en säkerhetskontext som "
+"matchar det givna utökade reguljära uttrycksmönstret. Måste föregå andra "
+"argument på kommandoraden. Kommandonamnen är valfria."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "KÄNDA FEL"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid ""
+"Killing by file only works for executables that are kept open during "
+"execution, i.e. impure executables can't be killed this way."
+msgstr ""
+"Dödande efter fil fungerar endast för körbara filer som förbli öppna under "
+"körning, d.v.s. orena körbara filer kan inte dödas på detta sätt."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid ""
+"Be warned that typing B<killall> I<name> may not have the desired effect on "
+"non-Linux systems, especially when done by a privileged user."
+msgstr ""
+"Varning för att B<killall> I<namn> kanske inte får den önskade effekten på "
+"icke-Linux-system, speciellt när det körs som en privilegierad användare."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid ""
+"B<killall -w> doesn't detect if a process disappears and is replaced by a "
+"new process with the same PID between scans."
+msgstr ""
+"B<killall -w> detekterar om en process försvinner och ersätts av en ny "
+"process med samma PID mellan genomsökningar."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid ""
+"If processes change their name, B<killall> may not be able to match them "
+"correctly."
+msgstr ""
+"Om processer ändrar sina namn kan B<killall> kanske komma att misslyckas att "
+"matcha dem korrekt."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid ""
+"B<killall> has a limit of names that can be specified on the command line. "
+"This figure is the size of an unsigned long integer multiplied by 8. For "
+"most 32 bit systems the limit is 32 and similarly for a 64 bit system the "
+"limit is usually 64."
+msgstr ""
+"B<killall> har en begränsning på antalet namn som kan anges på "
+"kommandoraden. Denna är storleken på en unsigned long int multiplicerad med "
+"8. För de flesta 32-bitarssystem är begränsningen 32 och på samma sätt för "
+"ett 64-bitarssystem är begränsningen vanligtvis 64."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+msgstr ""
+"B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), "
+"B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "2021-12-01"
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr "peekfd - kika på fildeskriptorer för körande processer"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr ""
+"B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--"
+"follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--"
+"help>] I<pid> [I<fd>] [I<fd>] ..."
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid ""
+"B<peekfd> attaches to a running process and intercepts all reads and writes "
+"to file descriptors. You can specify the desired file descriptor numbers or "
+"dump all of them."
+msgstr ""
+"B<peekfd> fäster till en körande process och fångar upp alla läsningar och "
+"skrivningar till fildeskriptorer. Du kan ange det önskade "
+"fildeskriptornumret eller dumpa dem allihop."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr "Gör ingen efterbehandling av läst eller skriven data."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr "Visa inte huvuden som indikerar källan för de dumpade byten."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid ""
+"Also dump the requested file descriptor activity in any new child processes "
+"that are created."
+msgstr ""
+"Dumpa också den begärda fildeskriptoraktiviteten i nya barnprocesser som "
+"skapas."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid ""
+"Remove duplicate read/writes from the output. If you're looking at a tty "
+"with echo, you might want this."
+msgstr ""
+"Ta bort duplicerade läsningar/skrivningar från utskriften. Om du tittar på "
+"den med en tty kan du vilja använda detta."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "Visa en versionssträng"
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "Visa ett hjälpmeddelande."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid ""
+"Not used but useful for the user to look at to get good file descriptor "
+"numbers."
+msgstr ""
+"Används inte men användbart för användaren att titta på för att få bra "
+"fildeskriptornummer."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "MILJÖ"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "Ingen."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTIK"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr "Följande diagnostik kan matas ut på stderr:"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Fel vid koppling till pid >I<E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid ""
+"An unknown error occurred while attempted to attach to a process, you may "
+"need to be root."
+msgstr ""
+"Ett okänt fel inträffade vid fästning till en process, du kanske måste vara "
+"root."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid ""
+"Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr "Troligtvis många. Bli inte förvånad om processen du övervakar dör."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "UPPHOVSMAN"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "2020-09-09"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "Linux\""
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "Linux användarhandbok"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog - rapportera aktuella loggsökvägar för en process"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<pid> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr "Kommandot B<pslog> rapporterar aktuella arbetsloggar för en process."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. "
+"Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr ""
+"Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> skrev B<pslog> 2015. Skicka "
+"felrapporter till E<.MT mulevito@gmail.com> E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat - skriv ut statistik för en process"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid ""
+"B<prtstat> prints the statistics of the specified process. This information "
+"comes from the B</proc/>I<pid>B</stat> file."
+msgstr ""
+"B<prstat> skriver ut statistiken för den angivna processen. Denna "
+"information kommer från filen B</proc/>I<pid>B</stat>."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "Skriv ut informationen i rått format."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "Visa informationen för B<prtstat>."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<pid>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "källa för informationen som B<prtstat> använder."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "2021-06-21"
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree - visa ett träd av processer"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-"
+"n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr ""
+"B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ "
+"--color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,"
+"B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-"
+"n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-"
+"pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --"
+"thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-"
+"Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,"
+"B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<användare>]"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid ""
+"B<pstree> shows running processes as a tree. The tree is rooted at either "
+"I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all "
+"process trees rooted at processes owned by that user are shown."
+msgstr ""
+"B<pstree> visar körande processer som ett träd. Trädet är rotat antingen "
+"efter I<pid> eller B<init> om I<pid> inte anges. Om ett användarnamn anges "
+"visas alla processträd rotade i processer som ägs av den användaren."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid ""
+"B<pstree> visually merges identical branches by putting them in square "
+"brackets and prefixing them with the repetition count, e.g."
+msgstr ""
+"B<pstree> sammanfogar visuellt identiska grenar genom att placera dem inom "
+"hakparenteser och genom att lägga till ett förled med antal repetitioner, t."
+"ex. kommer"
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "att bli"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid ""
+"Child threads of a process are found under the parent process and are shown "
+"with the process name in curly braces, e.g."
+msgstr ""
+"Barntrådar för processer hittas under föräldraprocessen och visas med "
+"processnamnet i klammerparenteser, t.ex."
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid ""
+"If B<pstree> is called as B<pstree.x11> then it will prompt the user at the "
+"end of the line to press return and will not return until that has "
+"happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr ""
+"Om B<pstree> anropas som B<pstree.x11> kommer det att fråga användaren på "
+"slutet av raden att trycka på retur och kommer inte att avslutas förrän det "
+"har hänt. Detta är användbart när B<pstree> körs i en xterminal."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid ""
+"Certain kernel or mount parameters, such as the I<hidepid> option for "
+"procfs, will hide information for some processes. In these situations "
+"B<pstree> will attempt to build the tree without this information, showing "
+"process names as question marks."
+msgstr ""
+"Vissa kärn- eller monteringsparametrar så som I<hidepid>-flaggan för procfs, "
+"kommer att gömma information för vissa processer. I dessa situationer kommer "
+"B<pstree> att försöka att bygga trädet utan denna information och visa "
+"processnamnen som frågetecken."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid ""
+"Show command line arguments. If the command line of a process is swapped "
+"out, that process is shown in parentheses. B<-a> implicitly disables "
+"compaction for processes but not threads."
+msgstr ""
+"Visa kommandoradsargument. Om kommandoraden för en process byts ut kommer "
+"processen att visas i parenteser. B<-a> inaktiverar implicit kompaktering "
+"för processer men inte för trådar."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "Använd ASCII-tecken för att rita trädet."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid ""
+"Disable compaction of identical subtrees. By default, subtrees are "
+"compacted whenever possible."
+msgstr ""
+"Inaktivera kompaktering av identiska underträd. Som standard kompakteras "
+"underträd närhelst det är möjligt."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid ""
+"Color the process name by given attribute. Currently B<pstree> only accepts "
+"the value B<age> which colors by process age. Processes newer than 60 "
+"seconds are green, newer than an hour yellow and the remaining red."
+msgstr ""
+"Färglägg processnamnen efter angivet attribut. B<pstree> accepterar för "
+"närvarande endast värdet B<age> vilket färgsätter efter processålder. "
+"Processer nyare än 60 sekunder är gröna, nyare än en timme, gula och "
+"resterande röda."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid ""
+"Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses "
+"after each process name. If both PIDs and PGIDs are displayed then PIDs are "
+"shown first."
+msgstr ""
+"Visa PGID:er. Process Grupp ID:er visas som decimala tal inom parentes "
+"efter varje processnamn. Om både PID:er och PGID:er visas så visas PID:er "
+"först."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "Använd VT100-linjeritningstecken."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid ""
+"Highlight the current process and its ancestors. This is a no-op if the "
+"terminal doesn't support highlighting or if neither the current process nor "
+"any of its ancestors are in the subtree being shown."
+msgstr ""
+"Markera aktuell process och dess förfäder. Detta gör ingenting om "
+"terminalen in har stöd för markering eller om varken den aktuella processen "
+"eller någon av dess förfäder finns i underträdet som visas."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid ""
+"Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, "
+"B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr ""
+"Som B<-h>, men markera den angivna processen istället. Till skillnad från "
+"B<-h>, kommer B<pstree> att misslyckads om B<-H> används och markering inte "
+"är möjligt."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid ""
+"Display long lines. By default, lines are truncated to either the COLUMNS "
+"environment variable or the display width. If neither of these methods "
+"work, the default of 132 columns is used."
+msgstr ""
+"Visa långa rader. Som standard trunkeras rader efter antingen "
+"miljövariabeln COLUMNS eller skärmbredden. Om ingendera av dessa metoder "
+"fungerar, används som standard 132 kolumner."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid ""
+"Sort processes with the same parent by PID instead of by name. (Numeric "
+"sort.)"
+msgstr ""
+"Sortera processer med samma förälder efter PID istället för efter namn. "
+"(Numerisk sortering.)"
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid ""
+"Show individual trees for each namespace of the type specified. The "
+"available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, "
+"I<uts>. Regular users don't have access to other users' processes "
+"information, so the output will be limited."
+msgstr ""
+"Visa individuella träd för varje namnrymd för den angivna typen. De möjliga "
+"typerna är I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. "
+"Vanliga användare har inte tillgång till andra användares "
+"processinformation, så utskrifterna kommer att vara begränsade."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid ""
+"Show PIDs. PIDs are shown as decimal numbers in parentheses after each "
+"process name. B<-p> implicitly disables compaction."
+msgstr ""
+"Visa PID:er. PID:er visas som decimaltal i parenteser efter varje "
+"processnamn. B<-p> inaktiverar implicit kompaktering."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "Visa föräldraprocesser för den angivna processen."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid ""
+"Show namespaces transitions. Like B<-N>, the output is limited when running "
+"as a regular user."
+msgstr ""
+"Visa namnrymdsövergångar. Som för B<-N> är utskriften begränsad vid körning "
+"som en vanlig användare."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "Visa fullständiga namn för trådar när det finns."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "Göm trådar och visa endast processer."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid ""
+"Show uid transitions. Whenever the uid of a process differs from the uid of "
+"its parent, the new uid is shown in parentheses after the process name."
+msgstr ""
+"Visa uid-övergångar. Närhelst uid:en för en process skiljer sig från uid:en "
+"för dess förälder visas den nya uid:en i parenteser efter processnamnet."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid ""
+"Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, "
+"UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with "
+"B<echo -e '\\033%@'>."
+msgstr ""
+"Använd UTF-8 (Unicode) linjeritningstecken. Under Linux 1.1-54 och senare "
+"kan UTF-8-läge aktiveras på konsolen med B<echo -e '\\033%8'> år inaktiveras "
+"med B<echo -e '\\033%@'>."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid ""
+"Show the current security attributes of the process. For SELinux systems "
+"this will be the security context."
+msgstr ""
+"Visa aktuella säkerhetsattribut för processen. För SELInux-system kommer "
+"detta att vara säkerhetskontexten."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "Vissa teckenuppsättningar kan vara inkompatibla med VT100-tecken."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
+
+#, no-wrap
+#~ msgid "2021-01-11"
+#~ msgstr "2021-01-11"
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
+
+#~ msgid "B<->"
+#~ msgstr "B<->"
+
+#~ msgid "Reset all options and set the signal back to SIGKILL."
+#~ msgstr "Återställ alla flaggor och sätt signalen tillbaka till SIGKILL."
diff --git a/man-po/sv/fuser.1 b/man-po/sv/fuser.1
new file mode 100644
index 0000000..89b754c
--- /dev/null
+++ b/man-po/sv/fuser.1
@@ -0,0 +1,221 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 2022\-11\-02 psmisc Användarkommandon
+.SH NAMN
+fuser \- identifiera processer som använder filer eller uttag
+.SH SYNOPSIS
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP
+\fIutrymme\fP] [\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fISIGNAL\fP] ] \fInamn\fP ...
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH BESKRIVNING
+\fBfuser\fP visar PID:arna för processor som använder den angivna filerna eller
+filsystemen. I standardvisningsläge kommer varje filnamn att åtföljas av en
+bokstav som visar typen av åtkomst:
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+aktuell katalog.
+.TP
+\fBe\fP
+körbar fil körs.
+.TP
+\fBf\fP
+fil öppen. \fBf\fP utelämnas i standardvisningsläge.
+.TP
+\fBF\fP
+öppen för skrivning. \fBF\fP utelämnas i standardvisningsläge.
+.TP
+\fBr\fP
+rotkatalog.
+.TP
+\fBm\fP
+mmap:pad fil eller delat bibliotek.
+.TP
+\&\fB.\fP
+Platshållare, utelämnas i standardvisningsläge.
+.PD
+.RE
+.LP
+\fBfuser\fP returnerar en returkod som inte är noll om ingen av de angivna
+filerna används eller vid ett fatalt fel. Om åtminstone en åtkomst hittats
+kommer \fBfuser\fP att returnera noll.
+.PP
+För att slå upp processer som använder TCP\- och UDP\-uttag måste motsvarande
+namnrymd väljas med flaggan \fB\-n\fP. Som standard kommer \fBfuser\fP att leta
+bland både IPv6\- och IPv4\-uttag. För att förändra standardbeteendet, använd
+flaggorna \fB\-4\fP och \fB\-6\fP. Uttagen kan anges antingen efter lokal eller
+fjärrport och fjärradressen. Alla fält är valfria, men komman i början av
+fält som saknas måste finnas:
+.PP
+[\fIlkl_port\fP][,[\fIfjr_värd\fP][,[\fIfjr_port\fP]]]
+.PP
+Endera symboliska eller numeriska värden kan användas för IP\-adresser och
+portnummer.
+.PP
+\fBfuser\fP matar endas ut PID:ar till standard ut, allting annat skickas till
+standard fel.
+.SH FLAGGOR
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+Visa alla filer angivna på kommandoraden. Som standard visas endast filer
+som används av åtminstone en process.
+.TP
+\fB\-c\fP
+Samma som flaggan \fB\-m\fP, används för POSIX\-kompatibilitet.
+.TP
+\fB\-f\fP
+Ignoreras tyst, används för POSIX\-kompatibilitet.
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+Döda processer som kommer åt filen. Om det inte ändrats med
+\fB\-\fP\fISIGNAL\/\fP, så skickas SIGKILL. En \fBfuser\fP process dödar aldrig sig
+själv, men kan döda andra \fBfuser\fP\-processer. Det effektiva användar\-ID:t
+för processen som kör \fBfuser\fP sätts till dess riktiga användar\-ID innan
+försök att döda.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+Fråga användaren om bekräftelse innan en process dödas. Denna flagga
+ignoreras tyst om \fB\-k\fP saknas.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+För namnrymden \fBfile\fP låt alla jämförelser baseras på inoderna för de
+angivna filerna och aldrig på filnamnen, gäller även för nätverksbaserade
+filsystem.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+Lista alla kända signaler.
+.TP
+\fB\-m\fP\fI NAMN\fP, \fB\-\-mount \fP\fINAMN\fP
+\fINAMN\fP anger en fil på ett monterat filsystem eller en blockenhet som är
+monterad. Alla processer som använder filer på det filsystemet listas. Om
+en katalog inte anges, ändras den automatiskt till \fINAMN\fP/ för att använda
+eventuellt filsystem som monterats på den katalogen.
+.TP
+the shortcut notation
+Begäran kommer att uppfyllas om \fINAMN\fP anger en monteringspunkt. Detta är
+ett ovärderligt säkerhetsbälte vilket förhindrar sig från att döda maskinen
+om \fINAMN\fP inte råkas vara ett filsystem.
+.TP
+\fB\-w\fP
+Döda endast processer som har skrivåtkomst. Denna flagga ignoreras tyst om
+\fB\-k\fP saknas.
+.TP
+\fB\-n\fP\fI NAMNRYMD\fP, \fB\-\-namespace \fP\fINAMNRYMD\fP
+Välj en annan namnrymd. Namnrymderna \fBfile\fP (filnamn, standardvärdet),
+\fBudp\fP (lokala UDP\-portar) och \fBtcp\fP (lokala TCP\-portar) stöds. För portar
+kan antingen portnumret eller det symboliska namnet anges. Om det inte
+finns tvetydighet kan kortbeteckningen \fInamn\fP\fB/\fP\fIrymd\fP användas
+(t.ex. \fI80\fP\fB/\fP\fItcp\fP).
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+Tyst läge. \fB\-u\fP och \fB\-v\fP ignoreras i detta läge. \fB\-a\fP kan inte användas
+tillsammans med \fB\-s\fP.
+.TP
+\fB\-\fP\fISIGNAL\fP
+Använd den angivna signalen istället för SIGKILL då processer dödas.
+Signaler kan ange antingen med namn (t.ex. \fB\-HUP\fP) eller med nummer
+(t.ex. \fB\-1\fP). Denna flagga ignoreras tyst om flaggan \fB\-k\fP inte används.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+Lägg till användarnamnet för processägaren till varje PID.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+Utförligt läge. Processer visas i en \fBps\fP\-liknande stil. Fälten PID, USER
+och COMMAND liknar de från \fBps\fP. ACCESS visar hur processen använder
+filen. Utförligt läge kommer också att visa när en särskild fil används som
+en monteringspunkt, knfs exportering eller speglingsfil. I detta fall visas
+\fBkernel\fP istället för PID:en.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Visa versionsinformation.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+SökSök endast efter IPv4\-uttag. Denna flagga kan inte användas tillsammans
+med flaggan \fB\-6\fP och påverkar bara tcp\- och udp\-namnrymderna.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+Sök endast efter IPv6\-uttag. Denna flagga kan inte användas tillsammans med
+flaggan \fB\-4\fP och påverkar bara tcp\- och udp\-namnrymderna.
+.SH FILER
+.TP
+/proc
+plats för proc\-filsystemet
+.SH EXEMPEL
+.TP
+\fBfuser \-km /home\fP
+dödar alla processer som använder filsystemet /home på något sätt.
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fIkommando\fP\fB; fi\fP
+kör \fIkommando\fP om inga andra processer använder /dev/ttyS1.
+.TP
+\fBfuser telnet/tcp\fP
+visar alla processer på den (lokala) TELNET\-porten.
+.SH BEGRÄNSNINGAR
+Processer som använder samma fil eller filsystem flera gånger på samma sätt
+visas endast en gång.
+.PP
+Om samma objekt anges flera gånger på kommandoraden, kommer vissa av de
+posterna att ignoreras.
+.PP
+\fBfuser\fP kanska bara kan samla ihop partiell information om det körs utan
+privilegier. Som en konsekvens kanske filer öppnade av processer som
+tillhör andra användare inte komma att listas och körbara filer kanske
+endast klassificeras som mappade.
+.PP
+\fBfuser\fP kan inte rapportera processor som det inte har tillåtelse att titta
+på fildeskriptortabellen för. Det mest frekventa tillfället då detta
+problem uppstår är när man letar efter TCP\- eller UDP\-uttag och \fBfuser\fP
+inte körs som root\-användare. I detta fall kommer \fBfuser\fP inte att
+rapportera någon användning.
+.PP
+Att installera \fBfuser\fP som SUID root kommer att undvika problem associerade
+med ofullständig information, men kan vara oönskat av säkerhets\- och
+sekretesskäl.
+.PP
+\fBudp\fP\- och \fBtcp\fP\-namnrymder och UNIX\-domänuttag kan inte genomsökas med
+kärnor äldre än 1.3.78.
+.PP
+Åtkomst av kärnan visas endast med flaggan \fB\-v\fP.
+.PP
+Flaggan \fB\-k\fP fungerar endast för processer. Om användaren är kärnan kommer
+\fBfuser\fP att skriva ut en rekommendation, men inte genomföra någon åtgärd
+utöver det.
+.PP
+\fBfuser\fP kommer inte att se blockenheter monterade av processer i en annan
+monteringsnamnrymd. Detta är på grund av att enhets\-ID:t som visas i
+processens fildeskriptortabell kommer från processnamnrymden, inte fusers;
+vilket innebär att de inte matchar.
+.SH FEL
+.PP
+\fBfuser \-m /dev/sgX\fP kommer att visa (eller döda med \fB\-k\fP\-flaggan) alla
+processer även om du inte har den enheten konfigurerad. Det kan finnas
+ytterligare enheter detta gäller.
+.PP
+Monteringsflaggan \fB\-m\fP kommer att matcha alla filer inom samma enhet som
+den angivna filen, använd även flaggan \fB\-M\fP om det endast menar att ange
+monteringspunkten.
+.PP
+\fBfuser\fP will not match mapped files, such as a process' shared libraries if
+they are on a \fBbtrfs\fP(5) filesystem due to the device IDs being different
+for \fBstat\fP(2) and \fI/proc/<PID>/maps\fP.
+.SH "SE VIDARE"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/sv/killall.1 b/man-po/sv/killall.1
new file mode 100644
index 0000000..cc46178
--- /dev/null
+++ b/man-po/sv/killall.1
@@ -0,0 +1,123 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH KILLALL 1 2023\-06\-17 psmisc Användarkommandon
+.SH NAMN
+killall \- döda processer efter namn
+.SH SYNOPSIS
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fImönster\fP] [\fB\-e\fP,\fB\ \-\-exact\fP] [\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP \fIPID\fP]
+[\fB\-o\fP,\fB\ \-\-older\-than\fP \fITID\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP] [\fB\-r\fP,\fB\ \-\-regexp\fP]
+[\fB\-s\fP,\fB\ \-\-signal\fP \fISIGNAL\fP,\ \fB\-\fP\fISIGNAL\fP] [\fB\-u\fP,\fB\ \-\-user\fP
+\fIanvändare\fP] [\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP] [\fB\-y\fP,\fB\ \-\-younger\-than\fP \fITID\fP] [\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\fB\ \-\-version\fP]
+[\fB\-\-\fP] \fInamn\fP ...
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH BESKRIVNING
+\fBkillall\fP skickar en signal till alla processer som kör någon av de angivna
+kommandona. Om inget signalnamn anges skickas SIGTERM.
+.PP
+Signals can be specified either by name (e.g.\& \fB\-HUP\fP or \fB\-SIGHUP\fP) or
+by number (e.g.\& \fB\-1\fP) or by option \fB\-s\fP.
+.PP
+Om kommandonamnet inte är ett reguljärt uttryck (flagga \fB\-r\fP) och
+innehåller ett snedstreck (\fB/\fP) kommer processer som kör den filen att bli
+utvalda och dödade, oberoende av deras namn.
+.PP
+\fBkillall\fP returnerar en returkod som är noll om åtminstone en process har
+dödats för varje listat kommando eller om inga kommando listades och
+åtminstone en process matchade sökkriterierna \fB\-u\fP och \fB\-Z\fP. Annars
+returnerar \fBkillall\fP något annat än noll.
+.PP
+En \fBkillall\fP\-process dödar aldrig sig själv (men kan döda andra
+\fBkillall\fP\-processer).
+.SH FLAGGOR
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+Kräver en exakt match för väldigt långa namn. Om ett kommandonamn är längre
+än 15 tecken kan det fullständiga namn vara otillgängligt (det kan t.ex.
+vara utspeglat). I detta fall kommer \fBkillall\fP att döda allting som
+matchar de första 15 tecknen. Med \fB\-e\fP kommer sådana poster att hoppas
+över. \fBkillall\fP skriver ut ett meddelandet för varje överhoppad post om
+\fB\-v\fP anges i kombination med \fB\-e\fP.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+Gör namnmatchningen skiftlägesokänslig.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+Döda processgruppen som processen tillhör. Dödssignalen skickas endast en
+gång per grupp även om flera processer hittades som hör till samma
+processgrupp.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+Fråga interaktivt efter bekräftelse innan dödande.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+Lista alla kända signaler.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+Matcha mot PID\-namnrymden för den angivna PID:en. Standard är att matcha mot
+alla namnrymder.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+Matcha endast processer som är äldre (startade innan) den angivna tiden.
+Tiden anges som ett flyttal följt av en enhet. Enheterna är s,m,h,d,w,M,y
+för sekunder, minuter, timmar, dagar, veckor, månader respektive år.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+Klaga inte om inga processer dödades.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+Tolka processnamnmönstret som ett POSIX utökat reguljärt uttryck enligt
+\fBregex\fP(3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fISIGNAL\fP"
+Skicka denna signal istället för SIGTERM.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+Döda endast processer som den angivna användaren äger. Kommandonamnen är
+valfria.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+Rapportera om signalen skickades framgångsrikt.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+Visa versionsinformation.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+Vänta på att alla dödade processer dör. \fBkillall\fP kontrollerar en gång per
+sekund om någon av de dödade processerna fortfarande existerar och
+returnerar först när ingen finns kvar. Notera att \fBkillall\fP kan komma att
+vänta för evigt om signalen ignorerats, inte hade någon effekt, eller om
+processen förblir i ett zombietillstånd.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+Matcha endast processer som är yngre (startade efter) den angivna tiden.
+Tiden anges som ett flyttal följt av en enhet. Enheterna är s,m,h,d,w,M,y
+för sekunder, minuter, timmar, dagar, veckor, månader respektive år.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+Ange säkerhetskontext: döda endast processer som har en säkerhetskontext som
+matchar det givna utökade reguljära uttrycksmönstret. Måste föregå andra
+argument på kommandoraden. Kommandonamnen är valfria.
+.SH FILER
+.TP
+/proc
+plats för proc\-filsystemet
+.SH "KÄNDA FEL"
+Dödande efter fil fungerar endast för körbara filer som förbli öppna under
+körning, d.v.s. orena körbara filer kan inte dödas på detta sätt.
+.PP
+Varning för att \fBkillall\fP \fInamn\fP kanske inte får den önskade effekten på
+icke\-Linux\-system, speciellt när det körs som en privilegierad användare.
+.PP
+\fBkillall \-w\fP detekterar om en process försvinner och ersätts av en ny
+process med samma PID mellan genomsökningar.
+.PP
+Om processer ändrar sina namn kan \fBkillall\fP kanske komma att misslyckas att
+matcha dem korrekt.
+.PP
+\fBkillall\fP har en begränsning på antalet namn som kan anges på
+kommandoraden. Denna är storleken på en unsigned long int multiplicerad med
+8. För de flesta 32\-bitarssystem är begränsningen 32 och på samma sätt för
+ett 64\-bitarssystem är begränsningen vanligtvis 64.
+.SH "SE VIDARE"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBregex\fP(3).
diff --git a/man-po/sv/peekfd.1 b/man-po/sv/peekfd.1
new file mode 100644
index 0000000..afdf370
--- /dev/null
+++ b/man-po/sv/peekfd.1
@@ -0,0 +1,60 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 2021\-12\-01 psmisc Användarkommandon
+.SH NAMN
+peekfd \- kika på fildeskriptorer för körande processer
+.SH SYNOPSIS
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-c\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIpid\fP [\fIfd\fP] [\fIfd\fP] ...
+.SH BESKRIVNING
+\fBpeekfd\fP fäster till en körande process och fångar upp alla läsningar och
+skrivningar till fildeskriptorer. Du kan ange det önskade
+fildeskriptornumret eller dumpa dem allihop.
+.SH FLAGGOR
+.IP \-8
+Gör ingen efterbehandling av läst eller skriven data.
+.IP \-n
+Visa inte huvuden som indikerar källan för de dumpade byten.
+.IP \-c
+Dumpa också den begärda fildeskriptoraktiviteten i nya barnprocesser som
+skapas.
+.IP \-d
+Ta bort duplicerade läsningar/skrivningar från utskriften. Om du tittar på
+den med en tty kan du vilja använda detta.
+.IP \-v
+Visa en versionssträng
+.IP \-h
+Visa ett hjälpmeddelande.
+.SH FILER
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+Används inte men användbart för användaren att titta på för att få bra
+fildeskriptornummer.
+.SH MILJÖ
+Ingen.
+.SH DIAGNOSTIK
+Följande diagnostik kan matas ut på stderr:
+.TP
+\fBFel vid koppling till pid \fP\fI<PID>\fP
+Ett okänt fel inträffade vid fästning till en process, du kanske måste vara
+root.
+.SH FEL
+Troligtvis många. Bli inte förvånad om processen du övervakar dör.
+.SH UPPHOVSMAN
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "SE VIDARE"
+\fBttysnoop\fP(8)
diff --git a/man-po/sv/prtstat.1 b/man-po/sv/prtstat.1
new file mode 100644
index 0000000..3b0ebc7
--- /dev/null
+++ b/man-po/sv/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 2020\-09\-09 psmisc Användarkommandon
+.SH NAMN
+prtstat \- skriv ut statistik för en process
+.SH SYNOPSIS
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH BESKRIVNING
+\fBprstat\fP skriver ut statistiken för den angivna processen. Denna
+information kommer från filen \fB/proc/\fP\fIpid\fP\fB/stat\fP.
+.SH FLAGGOR
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+Skriv ut informationen i rått format.
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+Visa informationen för \fBprtstat\fP.
+.SH FILER
+.TP
+\fB/proc/\fP\fIpid\fP\fB/stat\fP
+källa för informationen som \fBprtstat\fP använder.
diff --git a/man-po/sv/pslog.1 b/man-po/sv/pslog.1
new file mode 100644
index 0000000..83f0c7e
--- /dev/null
+++ b/man-po/sv/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 2020\-09\-09 Linux\(dq "Linux användarhandbok"
+.SH NAMN
+pslog \- rapportera aktuella loggsökvägar för en process
+.SH SYNOPSIS
+.ad l
+\fBpslog\fP \fIpid\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH BESKRIVNING
+Kommandot \fBpslog\fP rapporterar aktuella arbetsloggar för en process.
+.SH FLAGGOR
+.TP
+\fB\-V\fP
+Visa versionsinformation.
+.SH "SE VIDARE"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH UPPHOVSMAN
+Vito Mule\(cq
+.MT mulevito@gmail.com
+.ME
+skrev \fBpslog\fP 2015. Skicka
+felrapporter till
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/sv/pstree.1 b/man-po/sv/pstree.1
new file mode 100644
index 0000000..31cd144
--- /dev/null
+++ b/man-po/sv/pstree.1
@@ -0,0 +1,139 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 2021\-06\-21 psmisc Användarkommandon
+.SH NAMN
+pstree \- visa ett träd av processer
+.SH SYNOPSIS
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIattr\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fI\ pid\fP,\fB\ \-\-highlight\-pid\ \fP\fIpid\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fIns\fP] [\fB\-p\fP,\fB\ \-\-show\-pids\fP]
+[\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP] [\fB\-u\fP,\fB\ \-\-uid\-changes\fP]
+[\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIpid\fP,\fB\ \fP\fIanvändare\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH BESKRIVNING
+\fBpstree\fP visar körande processer som ett träd. Trädet är rotat antingen
+efter \fIpid\fP eller \fBinit\fP om \fIpid\fP inte anges. Om ett användarnamn anges
+visas alla processträd rotade i processer som ägs av den användaren.
+.PP
+\fBpstree\fP sammanfogar visuellt identiska grenar genom att placera dem inom
+hakparenteser och genom att lägga till ett förled med antal repetitioner,
+t.ex. kommer
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+att bli
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+Barntrådar för processer hittas under föräldraprocessen och visas med
+processnamnet i klammerparenteser, t.ex.
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+Om \fBpstree\fP anropas som \fBpstree.x11\fP kommer det att fråga användaren på
+slutet av raden att trycka på retur och kommer inte att avslutas förrän det
+har hänt. Detta är användbart när \fBpstree\fP körs i en xterminal.
+.PP
+Vissa kärn\- eller monteringsparametrar så som \fIhidepid\fP\-flaggan för procfs,
+kommer att gömma information för vissa processer. I dessa situationer kommer
+\fBpstree\fP att försöka att bygga trädet utan denna information och visa
+processnamnen som frågetecken.
+
+.SH FLAGGOR
+.IP \fB\-a\fP
+Visa kommandoradsargument. Om kommandoraden för en process byts ut kommer
+processen att visas i parenteser. \fB\-a\fP inaktiverar implicit kompaktering
+för processer men inte för trådar.
+.IP \fB\-A\fP
+Använd ASCII\-tecken för att rita trädet.
+.IP \fB\-c\fP
+Inaktivera kompaktering av identiska underträd. Som standard kompakteras
+underträd närhelst det är möjligt.
+.IP \fB\-C\fP
+Färglägg processnamnen efter angivet attribut. \fBpstree\fP accepterar för
+närvarande endast värdet \fBage\fP vilket färgsätter efter processålder.
+Processer nyare än 60 sekunder är gröna, nyare än en timme, gula och
+resterande röda.
+.IP \fB\-g\fP
+Visa PGID:er. Process Grupp ID:er visas som decimala tal inom parentes
+efter varje processnamn. Om både PID:er och PGID:er visas så visas PID:er
+först.
+.IP \fB\-G\fP
+Använd VT100\-linjeritningstecken.
+.IP \fB\-h\fP
+Markera aktuell process och dess förfäder. Detta gör ingenting om
+terminalen in har stöd för markering eller om varken den aktuella processen
+eller någon av dess förfäder finns i underträdet som visas.
+.IP \fB\-H\fP
+Som \fB\-h\fP, men markera den angivna processen istället. Till skillnad från
+\fB\-h\fP, kommer \fBpstree\fP att misslyckads om \fB\-H\fP används och markering inte
+är möjligt.
+.IP \fB\-l\fP
+Visa långa rader. Som standard trunkeras rader efter antingen
+miljövariabeln COLUMNS eller skärmbredden. Om ingendera av dessa metoder
+fungerar, används som standard 132 kolumner.
+.IP \fB\-n\fP
+Sortera processer med samma förälder efter PID istället för efter namn.
+(Numerisk sortering.)
+.IP \fB\-N\fP
+Visa individuella träd för varje namnrymd för den angivna typen. De möjliga
+typerna är \fIipc\fP, \fImnt\fP, \fInet\fP, \fIpid\fP, \fItime\fP, \fIuser\fP, \fIuts\fP.
+Vanliga användare har inte tillgång till andra användares
+processinformation, så utskrifterna kommer att vara begränsade.
+.IP \fB\-p\fP
+Visa PID:er. PID:er visas som decimaltal i parenteser efter varje
+processnamn. \fB\-p\fP inaktiverar implicit kompaktering.
+.IP \fB\-s\fP
+Visa föräldraprocesser för den angivna processen.
+.IP \fB\-S\fP
+Visa namnrymdsövergångar. Som för \fB\-N\fP är utskriften begränsad vid körning
+som en vanlig användare.
+.IP \fB\-t\fP
+Visa fullständiga namn för trådar när det finns.
+.IP \fB\-T\fP
+Göm trådar och visa endast processer.
+.IP \fB\-u\fP
+Visa uid\-övergångar. Närhelst uid:en för en process skiljer sig från uid:en
+för dess förälder visas den nya uid:en i parenteser efter processnamnet.
+.IP \fB\-U\fP
+Använd UTF\-8 (Unicode) linjeritningstecken. Under Linux 1.1\-54 och senare
+kan UTF\-8\-läge aktiveras på konsolen med \fBecho \-e '\033%8'\fP år inaktiveras
+med \fBecho \-e '\033%@'\fP.
+.IP \fB\-V\fP
+Visa versionsinformation.
+.IP \fB\-Z\fP
+Visa aktuella säkerhetsattribut för processen. För SELInux\-system kommer
+detta att vara säkerhetskontexten.
+.SH FILER
+.TP
+/proc
+plats för proc\-filsystemet
+.SH FEL
+Vissa teckenuppsättningar kan vara inkompatibla med VT100\-tecken.
+.SH "SE VIDARE"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/man-po/uk.po b/man-po/uk.po
new file mode 100644
index 0000000..9978af7
--- /dev/null
+++ b/man-po/uk.po
@@ -0,0 +1,1364 @@
+# Ukrainian translation for psmisc-man
+# Copyright (C) 2021 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Yuri Chornoivan <yurchor@ukr.net>, 2021, 2022, 2024.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-man 23.7-rc1\n"
+"Report-Msgid-Bugs-To: Craig Small <csmall@dropbear.xyz>\n"
+"POT-Creation-Date: 2024-01-13 14:23+1100\n"
+"PO-Revision-Date: 2024-02-13 17:55+0200\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 23.04.1\n"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "FUSER"
+msgstr "FUSER"
+
+#. type: TH
+#: ../doc/fuser.1:9
+#, no-wrap
+msgid "2022-11-02"
+msgstr "2 лиÑтопада 2022 року"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "psmisc"
+msgstr "psmisc"
+
+#. type: TH
+#: ../doc/fuser.1:9 ../doc/killall.1:9 ../doc/peekfd.1:9 ../doc/prtstat.1:9
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "User Commands"
+msgstr "Команди кориÑтувача"
+
+#. type: SH
+#: ../doc/fuser.1:10 ../doc/killall.1:10 ../doc/peekfd.1:10 ../doc/pslog.1:10
+#: ../doc/prtstat.1:10 ../doc/pstree.1:10
+#, no-wrap
+msgid "NAME"
+msgstr "ÐÐЗВÐ"
+
+#. type: Plain text
+#: ../doc/fuser.1:12
+msgid "fuser - identify processes using files or sockets"
+msgstr "fuser — програма Ð´Ð»Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— процеÑів на оÑнові файлів або Ñокетів"
+
+#. type: SH
+#: ../doc/fuser.1:12 ../doc/killall.1:12 ../doc/peekfd.1:12 ../doc/pslog.1:12
+#: ../doc/prtstat.1:12 ../doc/pstree.1:12
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "КОРОТКИЙ ОПИС"
+
+#. type: Plain text
+#: ../doc/fuser.1:28
+msgid "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<space>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<SIGNAL>] ] I<name> ..."
+msgstr "B<fuser> [B<-fuv>] [B<-a>|B<-s>] [B<-4>|B<-6>] [B<-c>|B<-m>|B<-n> I<проÑÑ‚Ñ–Ñ€>] [B<\\ -k> [B<-i>] [B<-M>] [B<-w>] [B<->I<СИГÐÐЛ>] ] I<назва> ..."
+
+#. type: Plain text
+#: ../doc/fuser.1:30
+msgid "B<fuser -l>"
+msgstr "B<fuser -l>"
+
+#. type: Plain text
+#: ../doc/fuser.1:32
+msgid "B<fuser -V>"
+msgstr "B<fuser -V>"
+
+#. type: SH
+#: ../doc/fuser.1:33 ../doc/killall.1:45 ../doc/peekfd.1:23 ../doc/pslog.1:19
+#: ../doc/prtstat.1:21 ../doc/pstree.1:36
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "ОПИС"
+
+#. type: Plain text
+#: ../doc/fuser.1:38
+msgid "B<fuser> displays the PIDs of processes using the specified files or file systems. In the default display mode, each file name is followed by a letter denoting the type of access:"
+msgstr "B<fuser> виводить дані щодо PID процеÑів на оÑнові вказаних файлів або файлових ÑиÑтем. У типовому режимі показу піÑÐ»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— назви файла буде вказано літеру, Ñка вказуватиме на тип доÑтупу:"
+
+#. type: TP
+#: ../doc/fuser.1:41
+#, no-wrap
+msgid "B<c>"
+msgstr "B<c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:44
+msgid "current directory."
+msgstr "поточний каталог."
+
+#. type: TP
+#: ../doc/fuser.1:44
+#, no-wrap
+msgid "B<e>"
+msgstr "B<e>"
+
+#. type: Plain text
+#: ../doc/fuser.1:47
+msgid "executable being run."
+msgstr "виконуваний файл, Ñкий запуÑкаєтьÑÑ."
+
+#. type: TP
+#: ../doc/fuser.1:47
+#, no-wrap
+msgid "B<f>"
+msgstr "B<f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:52
+msgid "open file. B<f> is omitted in default display mode."
+msgstr "відкрити файл. B<f> буде пропущено у типовому режимі показу."
+
+#. type: TP
+#: ../doc/fuser.1:52
+#, no-wrap
+msgid "B<F>"
+msgstr "B<F>"
+
+#. type: Plain text
+#: ../doc/fuser.1:57
+msgid "open file for writing. B<F> is omitted in default display mode."
+msgstr "відкрити файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу. B<F> буде пропущено у типовому режимі показу."
+
+#. type: TP
+#: ../doc/fuser.1:57
+#, no-wrap
+msgid "B<r>"
+msgstr "B<r>"
+
+#. type: Plain text
+#: ../doc/fuser.1:60
+msgid "root directory."
+msgstr "Кореневий каталог."
+
+#. type: TP
+#: ../doc/fuser.1:60
+#, no-wrap
+msgid "B<m>"
+msgstr "B<m>"
+
+#. type: Plain text
+#: ../doc/fuser.1:63
+msgid "mmap'ed file or shared library."
+msgstr "пов'Ñзаний mmap файл або бібліотека Ñпільного викориÑтаннÑ."
+
+#. type: TP
+#: ../doc/fuser.1:63
+#, no-wrap
+msgid "B<.>"
+msgstr "B<.>"
+
+#. type: Plain text
+#: ../doc/fuser.1:66
+msgid "Placeholder, omitted in default display mode."
+msgstr "Замінник, буде пропущено у типовому режимі показу."
+
+#. type: Plain text
+#: ../doc/fuser.1:75
+msgid "B<fuser> returns a non-zero return code if none of the specified files is accessed or in case of a fatal error. If at least one access has been found, B<fuser> returns zero."
+msgstr "B<fuser> повертає ненульовий код, Ñкщо програмі не вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ доÑтуп до жодного з вказаних файлів або Ñкщо трапитьÑÑ ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° помилка. Якщо вдаÑÑ‚ÑŒÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ доÑтуп хоча б до одного з файлів, B<fuser> повертає нуль."
+
+#. type: Plain text
+#: ../doc/fuser.1:89
+msgid "In order to look up processes using TCP and UDP sockets, the corresponding name space has to be selected with the B<-n> option. By default B<fuser> will look in both IPv6 and IPv4 sockets. To change the default behavior, use the B<-4> and B<-6> options. The socket(s) can be specified by the local and remote port, and the remote address. All fields are optional, but commas in front of missing fields must be present:"
+msgstr "З метою пошуку процеÑів з викориÑтаннÑм Ñокетів TCP та UDP Ñлід вибрати відповідний проÑÑ‚Ñ–Ñ€ назв за допомогою параметра B<-n>. Типово, B<fuser> шукатиме Ñеред Ñокетів IPv6 та IPv4. Щоб змінити типову поведінку, ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ B<-4> або B<-6>. Сокети можна задати за локальним або віддаленим портом та віддалено адреÑою. УÑÑ– Ð¿Ð¾Ð»Ñ Ñ” необов'Ñзковим, але коми перед пропущеними полÑми Ñлід Ñтавити:"
+
+#. type: Plain text
+#: ../doc/fuser.1:91
+msgid "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+msgstr "[I<lcl_port>][,[I<rmt_host>][,[I<rmt_port>]]]"
+
+#. type: Plain text
+#: ../doc/fuser.1:94
+msgid "Either symbolic or numeric values can be used for IP addresses and port numbers."
+msgstr "Ð”Ð»Ñ IP-Ð°Ð´Ñ€ÐµÑ Ñ‚Ð° номерів портів можна викориÑтовувати Ñимволічні або чиÑлові значеннÑ."
+
+#. type: Plain text
+#: ../doc/fuser.1:97
+msgid "B<fuser> outputs only the PIDs to stdout, everything else is sent to stderr."
+msgstr "B<fuser> виводить до Ñтандартного Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ PID, уÑÑ– інші дані буде надіÑлано до stderr."
+
+#. type: SH
+#: ../doc/fuser.1:97 ../doc/killall.1:78 ../doc/peekfd.1:28 ../doc/pslog.1:23
+#: ../doc/prtstat.1:27 ../doc/pstree.1:89
+#, no-wrap
+msgid "OPTIONS"
+msgstr "ПÐРÐМЕТРИ"
+
+#. type: TP
+#: ../doc/fuser.1:98
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: Plain text
+#: ../doc/fuser.1:102
+msgid "Show all files specified on the command line. By default, only files that are accessed by at least one process are shown."
+msgstr "Показати уÑÑ– файли, Ñкі вказано у Ñ€Ñдку команди. Типово, буде показано лише файли, доÑтуп до Ñких має принаймні один процеÑ."
+
+#. type: IP
+#: ../doc/fuser.1:102 ../doc/pstree.1:97
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../doc/fuser.1:105
+msgid "Same as B<-m> option, used for POSIX compatibility."
+msgstr "Те Ñаме, що Ñ– параметр B<-m>, викориÑтовуєтьÑÑ Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ– з POSIX."
+
+#. type: TP
+#: ../doc/fuser.1:105
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../doc/fuser.1:108
+msgid "Silently ignored, used for POSIX compatibility."
+msgstr "Буде проігноровано. ВикориÑтовуєтьÑÑ Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ– з POSIX."
+
+#. type: TP
+#: ../doc/fuser.1:108
+#, no-wrap
+msgid "B<-k>, B<--kill>"
+msgstr "B<-k>, B<--kill>"
+
+#. type: Plain text
+#: ../doc/fuser.1:120
+msgid "Kill processes accessing the file. Unless changed with B<->I<SIGNAL\\/>, SIGKILL is sent. An B<fuser> process never kills itself, but may kill other B<fuser> processes. The effective user ID of the process executing B<fuser> is set to its real user ID before attempting to kill."
+msgstr "Завершити роботу процеÑів, Ñкі мають доÑтуп до файла. Якщо не було внеÑено змін до назви Ñигналу за допомогою параметра B<->I<СИГÐÐЛ\\/>, буде надіÑлано Ñигнал SIGKILL. ÐŸÑ€Ð¾Ñ†ÐµÑ B<fuser> не може завершити Ñвою роботу, але може завершити роботу іншого процеÑу B<fuser>. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ідентифікатора кориÑтувача процеÑу, у Ñкому виконуєтьÑÑ B<fuser>, буде вÑтановлено відповідно до Ñправжнього ідентифікатор до того, Ñк програма Ñпробує перервати роботу іншої програми."
+
+#. type: IP
+#: ../doc/fuser.1:120 ../doc/killall.1:99
+#, no-wrap
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: Plain text
+#: ../doc/fuser.1:127
+msgid "Ask the user for confirmation before killing a process. This option is silently ignored if B<-k> is not present too."
+msgstr "Запитати кориÑтувача щодо Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð´Ñ–Ñ— до Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ процеÑу. Цей параметр буде проігноровано, Ñкщо не вказано параметр B<-k>."
+
+#. type: TP
+#: ../doc/fuser.1:127
+#, no-wrap
+msgid "B<-I>, B<--inode>"
+msgstr "B<-I>, B<--inode>"
+
+#. type: Plain text
+#: ../doc/fuser.1:133
+msgid "For the name space B<file> let all comparisons be based on the inodes of the specified file(s) and never on the file names even on network based file systems."
+msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñтору назв B<file> викориÑтовувати порівнÑÐ½Ð½Ñ Ð½Ð° оÑнові inode вказаних файлів, а не назв файлів, навіть у мережевих файлових ÑиÑтемах."
+
+#. type: TP
+#: ../doc/fuser.1:133
+#, no-wrap
+msgid "B<-l>, B<--list-signals>"
+msgstr "B<-l>, B<--list-signals>"
+
+#. type: Plain text
+#: ../doc/fuser.1:136 ../doc/killall.1:103
+msgid "List all known signal names."
+msgstr "ВивеÑти ÑпиÑок уÑÑ–Ñ… відомих назв Ñигналів."
+
+#. type: TP
+#: ../doc/fuser.1:136
+#, no-wrap
+msgid "B<-m>I< NAME>, B<--mount >I<NAME>"
+msgstr "B<-m>I< ÐÐЗВÐ>, B<--mount >I<ÐÐЗВÐ>"
+
+#. type: Plain text
+#: ../doc/fuser.1:144
+msgid "I<NAME> specifies a file on a mounted file system or a block device that is mounted. All processes accessing files on that file system are listed. If a directory is specified, it is automatically changed to I<NAME>/ to use any file system that might be mounted on that directory."
+msgstr "I<ÐÐЗВÐ> визначає файл на змонтованій файловій ÑиÑтемі або блоковий приÑтрій, Ñкий змонтовано. Буде виведено ÑпиÑок уÑÑ–Ñ… процеÑів, Ñкі отримали доÑтуп до файлів на цій файловій ÑиÑтемі. Якщо вказано каталог, назву буде автоматично замінено на I<ÐÐЗВÐ>/, Ñ– програма ÑкориÑтаєтьÑÑ Ð±ÑƒÐ´ÑŒ-Ñкою файловою ÑиÑтемою, Ñку може бути змонтовано до цього каталогу."
+
+#. type: TP
+#: ../doc/fuser.1:144
+#, no-wrap
+msgid "B<-M>, B<--ismountpoint>"
+msgstr "B<-M>, B<--ismountpoint>"
+
+#. type: Plain text
+#: ../doc/fuser.1:152
+msgid "Request will be fulfilled only if I<NAME> specifies a mountpoint. This is an invaluable seat belt which prevents you from killing the machine if I<NAME> happens to not be a filesystem."
+msgstr "Запит буде виконано, лише Ñкщо I<ÐÐЗВÐ> вказує на точку монтуваннÑ. Це чудовий паÑок безпеки, Ñкий не даÑÑ‚ÑŒ вам завершити роботу віртуальної машини, Ñкщо I<ÐÐЗВÐ>, раптом, не вказуватиме на файлову ÑиÑтему."
+
+#. type: TP
+#: ../doc/fuser.1:152
+#, no-wrap
+msgid "B<-w>"
+msgstr "B<-w>"
+
+#. type: Plain text
+#: ../doc/fuser.1:158
+msgid "Kill only processes which have write access. This option is silently ignored if B<-k> is not present too."
+msgstr "Завершити роботу лише процеÑів, Ñкі мають доÑтуп до запиÑу. Цей параметр буде проігноровано, Ñкщо не вказано параметр B<-k>."
+
+#. type: TP
+#: ../doc/fuser.1:158
+#, no-wrap
+msgid "B<-n>I< NAMESPACE>, B<--namespace >I<NAMESPACE>"
+msgstr "B<-n> I<ПРОСТІР_ÐÐЗВ>, B<--namespace> I<ПРОСТІР_ÐÐЗВ>"
+
+#. type: Plain text
+#: ../doc/fuser.1:173
+msgid "Select a different name space. The name spaces B<file> (file names, the default), B<udp> (local UDP ports), and B<tcp> (local TCP ports) are supported. For ports, either the port number or the symbolic name can be specified. If there is no ambiguity, the shortcut notation I<name>B</>I<space> (e.g., I<80>B</>I<tcp>) can be used."
+msgstr "Вибрати інший проÑÑ‚Ñ–Ñ€ назв. Передбачено підтримку проÑторів назв B<file> (назви файлів, типовий), B<udp> (локальні порти UDP) та B<tcp> (локальні порти TCP). Порти можна вказувати за допомогою Ñимволічної назви або номеру порту. Якщо немає неоднозначноÑтей, можна кориÑтуватиÑÑ Ñкороченою формою запиÑу: I<назва>B</>I<проÑÑ‚Ñ–Ñ€> (наприклад I<80>B</>I<tcp>)."
+
+#. type: TP
+#: ../doc/fuser.1:173
+#, no-wrap
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: Plain text
+#: ../doc/fuser.1:183
+msgid "Silent operation. B<-u> and B<-v> are ignored in this mode. B<-a> must not be used with B<-s>."
+msgstr "Виконати дію без Ñповіщень щодо виконаннÑ. У цьому режимі параметри B<-u> та B<-v> буде проігноровано. B<-a> не Ñлід викориÑтовувати разом із B<-s>."
+
+#. type: TP
+#: ../doc/fuser.1:183
+#, no-wrap
+msgid "B<->I<SIGNAL>"
+msgstr "B<->I<СИГÐÐЛ>"
+
+#. type: Plain text
+#: ../doc/fuser.1:193
+msgid "Use the specified signal instead of SIGKILL when killing processes. Signals can be specified either by name (e.g., B<-HUP>) or by number (e.g., B<-1>). This option is silently ignored if the B<-k> option is not used."
+msgstr "ВикориÑтовувати вказаний Ñигнал заміÑÑ‚ÑŒ SIGKILL Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ процеÑів. Сигнали можна вказувати або за назвою (наприклад B<-HUP>), або за номером (наприклад B<-1>). Цей параметр буде проігноровано, Ñкщо не викориÑтано параметр B<-k>."
+
+#. type: IP
+#: ../doc/fuser.1:193 ../doc/killall.1:118
+#, no-wrap
+msgid "B<-u>, B<--user>"
+msgstr "B<-u>, B<--user>"
+
+#. type: Plain text
+#: ../doc/fuser.1:196
+msgid "Append the user name of the process owner to each PID."
+msgstr "ДопиÑувати ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача-влаÑника процеÑу до кожного PID."
+
+#. type: IP
+#: ../doc/fuser.1:196 ../doc/killall.1:121
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../doc/fuser.1:207
+msgid "Verbose mode. Processes are shown in a B<ps>-like style. The fields PID, USER and COMMAND are similar to B<ps>. ACCESS shows how the process accesses the file. Verbose mode will also show when a particular file is being accessed as a mount point, knfs export or swap file. In this case B<kernel> is shown instead of the PID."
+msgstr "Режим докладних повідомлень. ПроцеÑи буде показано у Ñтилі B<ps>. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¼Ñ–Ñту полів PID, USER та COMMAND Ñ” тим Ñамим, що Ñ– у B<ps>. У полі ACCESS буде показано ÑпоÑіб доÑтупу процеÑу до файла. У докладному режимі також буде показано, чи виконано доÑтуп до певного файла Ñк до точки доÑтупу, екÑпортованих даних knfs або файла резервної пам'ÑÑ‚Ñ–. У цьому випадку заміÑÑ‚ÑŒ PID буде показано Ð·Ð°Ð¿Ð¸Ñ B<kernel>."
+
+#. type: IP
+#: ../doc/fuser.1:207 ../doc/killall.1:123
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: Plain text
+#: ../doc/fuser.1:210 ../doc/killall.1:125 ../doc/pslog.1:27
+#: ../doc/pstree.1:165
+msgid "Display version information."
+msgstr "Показати інформацію щодо верÑÑ–Ñ—."
+
+#. type: TP
+#: ../doc/fuser.1:210
+#, no-wrap
+msgid "B<-4>, B<--ipv4>"
+msgstr "B<-4>, B<--ipv4>"
+
+#. type: Plain text
+#: ../doc/fuser.1:215
+msgid "Search only for IPv4 sockets. This option must not be used with the B<-6> option and only has an effect with the tcp and udp namespaces."
+msgstr "Шукати Ñеред Ñокетів IPv4. Цей параметр не Ñлід викориÑтовувати разом із параметром B<-6>. Він працює лише Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторів назв tcp та udp."
+
+#. type: TP
+#: ../doc/fuser.1:215
+#, no-wrap
+msgid "B<-6>, B<--ipv6>"
+msgstr "B<-6>, B<--ipv6>"
+
+#. type: Plain text
+#: ../doc/fuser.1:220
+msgid "Search only for IPv6 sockets. This option must not be used with the B<-4> option and only has an effect with the tcp and udp namespaces."
+msgstr "Шукати Ñеред Ñокетів IPv6. Цей параметр не Ñлід викориÑтовувати разом із параметром B<-4>. Він працює лише Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторів назв tcp та udp."
+
+#. type: SH
+#: ../doc/fuser.1:220 ../doc/killall.1:143 ../doc/peekfd.1:43
+#: ../doc/prtstat.1:35 ../doc/pstree.1:168
+#, no-wrap
+msgid "FILES"
+msgstr "ФÐЙЛИ"
+
+#. type: TP
+#: ../doc/fuser.1:221 ../doc/killall.1:144 ../doc/pstree.1:169
+#, no-wrap
+msgid "/proc"
+msgstr "/proc"
+
+#. type: Plain text
+#: ../doc/fuser.1:224 ../doc/killall.1:147 ../doc/pstree.1:172
+msgid "location of the proc file system"
+msgstr "Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми процеÑів"
+
+#. type: SH
+#: ../doc/fuser.1:224
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "ПРИКЛÐДИ"
+
+#. type: TP
+#: ../doc/fuser.1:225
+#, no-wrap
+msgid "B<fuser -km /home>"
+msgstr "B<fuser -km /home>"
+
+#. type: Plain text
+#: ../doc/fuser.1:228
+msgid "kills all processes accessing the file system /home in any way."
+msgstr "завершує роботу уÑÑ–Ñ… процеÑів, Ñкі у будь-Ñкий ÑпоÑіб мають доÑтуп до файлової ÑиÑтеми /home."
+
+#. type: TP
+#: ../doc/fuser.1:228
+#, no-wrap
+msgid "B<if fuser -s /dev/ttyS1; then :; else >I<command>B<; fi>"
+msgstr "B<if fuser -s /dev/ttyS1; then :; else >I<команда>B<; fi>"
+
+#. type: Plain text
+#: ../doc/fuser.1:233
+msgid "invokes I<command> if no other process is using /dev/ttyS1."
+msgstr "викликає I<команду>, Ñкщо жоден інший Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ викориÑтовує /dev/ttyS1."
+
+#. type: TP
+#: ../doc/fuser.1:233
+#, no-wrap
+msgid "B<fuser telnet/tcp>"
+msgstr "B<fuser telnet/tcp>"
+
+#. type: Plain text
+#: ../doc/fuser.1:236
+msgid "shows all processes at the (local) TELNET port."
+msgstr "виводить ÑпиÑок уÑÑ–Ñ… процеÑів на (локальному) порту TELNET."
+
+#. type: SH
+#: ../doc/fuser.1:236
+#, no-wrap
+msgid "RESTRICTIONS"
+msgstr "ОБМЕЖЕÐÐЯ"
+
+#. type: Plain text
+#: ../doc/fuser.1:239
+msgid "Processes accessing the same file or file system several times in the same way are only shown once."
+msgstr "ПроцеÑи, Ñкі отримують доÑтуп до того Ñамого файла бо файлової ÑиÑтеми декілька разів, буде показано Ñк один запиÑ."
+
+#. type: Plain text
+#: ../doc/fuser.1:242
+msgid "If the same object is specified several times on the command line, some of those entries may be ignored."
+msgstr "Якщо той Ñамий об'єкт у Ñ€Ñдку команди вказано декілька разів, деÑкі із запиÑів об'єкта може бути проігноровано."
+
+#. type: Plain text
+#: ../doc/fuser.1:248
+msgid "B<fuser> may only be able to gather partial information unless run with privileges. As a consequence, files opened by processes belonging to other users may not be listed and executables may be classified as mapped only."
+msgstr "Якщо B<fuser> запущено від імені звичайного кориÑтувача, програма зможе отримати доÑтуп лише до чаÑтини даних. ÐаÑлідком цього Ñ” те, що файли, Ñкі відкрито процеÑами інших кориÑтувачів, можуть не потрапити до ÑпиÑку, а виконувані файли може бути клаÑифіковано Ñк такі, що лише пов'Ñзані із файлом."
+
+#. type: Plain text
+#: ../doc/fuser.1:257
+msgid "B<fuser> cannot report on any processes that it doesn't have permission to look at the file descriptor table for. The most common time this problem occurs is when looking for TCP or UDP sockets when running B<fuser> as a non-root user. In this case B<fuser> will report no access."
+msgstr "B<fuser> не зможе включити до звіту дані жодного з тих процеÑів, доÑтуп до таблиці деÑкрипторів файлів Ñких обмежено правами доÑтупу. ÐайчаÑтіше подібна проблема виникає, Ñкщо виконуєтьÑÑ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ° Ñокетів TCP або UDP від імені кориÑтувача, Ñкий не має прав доÑтупу адмініÑтратора (root). У таких випадках B<fuser> повідомить про те, що не має доÑтупу до потрібних програмі даних."
+
+#. type: Plain text
+#: ../doc/fuser.1:262
+msgid "Installing B<fuser> SUID root will avoid problems associated with partial information, but may be undesirable for security and privacy reasons."
+msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ B<fuser> SUID root може запобігти проблемам із доÑтупом до даних, але Ñ” небажаним із міркувань безпеки та конфіденційноÑÑ‚Ñ–."
+
+#. type: Plain text
+#: ../doc/fuser.1:268
+msgid "B<udp> and B<tcp> name spaces, and UNIX domain sockets can't be searched with kernels older than 1.3.78."
+msgstr "Пошук Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторів назв B<udp> та B<tcp>, а також Ñокетів доменів UNIX не можна виконувати, Ñкщо Ñдро ÑиÑтеми має верÑÑ–ÑŽ, Ñка Ñ” Ñтарішою за 1.3.78."
+
+#. type: Plain text
+#: ../doc/fuser.1:272
+msgid "Accesses by the kernel are only shown with the B<-v> option."
+msgstr "ДоÑтупи Ñдра буде показано, лише Ñкщо викориÑтано параметр B<-v>."
+
+#. type: Plain text
+#: ../doc/fuser.1:278
+msgid "The B<-k> option only works on processes. If the user is the kernel, B<fuser> will print an advice, but take no action beyond that."
+msgstr "Параметр B<-k> працює лише Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑів. Якщо кориÑтувачем Ñ” kernel, B<fuser> виведе повідомленнÑ-пораду, але не виконуватиме ніÑких дій щодо Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ процеÑу."
+
+#. type: Plain text
+#: ../doc/fuser.1:283
+msgid "B<fuser> will not see block devices mounted by processes in a different mount namespace. This is due to the device ID shown in the process' file descriptor table being from the process namespace, not fuser's; meaning it won't match."
+msgstr "B<fuser> не бачитиме блокові приÑтрої, Ñкі змонтовано процеÑами у інших проÑторах назв монтуваннÑ. Причиною Ñ” те, що ідентифікатор приÑтрою, Ñкий показано у таблиці деÑкрипторів файлів процеÑу, належить до проÑтору назв процеÑу, а не проÑтору назв fuser; тобто він не збігаєтьÑÑ Ð· потрібним."
+
+#. type: SH
+#: ../doc/fuser.1:283 ../doc/peekfd.1:56 ../doc/pstree.1:172
+#, no-wrap
+msgid "BUGS"
+msgstr "Ð’ÐДИ"
+
+#. type: Plain text
+#: ../doc/fuser.1:289
+msgid "B<fuser -m /dev/sgX> will show (or kill with the B<-k> flag) all processes, even if you don't have that device configured. There may be other devices it does this for too."
+msgstr "B<fuser -m /dev/sgX> покаже (або завершить роботу, Ñкщо було вказано параметр B<-k>) уÑÑ– процеÑи, навіть Ñкщо приÑтрій не налаштовано. Можуть бути Ñ– інші приÑтрої, Ð´Ð»Ñ Ñких така команда теж працюватиме."
+
+#. type: Plain text
+#: ../doc/fuser.1:293
+msgid "The mount B<-m> option will match any file within the same device as the specified file, use the B<-M> option as well if you mean to specify only the mount point."
+msgstr "Якщо буде вказано параметр Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ B<-m>, програма працюватиме із уÑіма файлами на приÑтрої, Ñкі за назвою збігатимутьÑÑ Ð·Ñ– вказаним файлом. СкориÑтайтеÑÑ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ð¼ параметром B<-M>, Ñкщо вам потрібні дані лише Ð´Ð»Ñ Ñамої точки монтуваннÑ."
+
+#. type: Plain text
+#: ../doc/fuser.1:301
+msgid "B<fuser> will not match mapped files, such as a process' shared libraries if they are on a B<btrfs>(5) filesystem due to the device IDs being different for B<stat>(2) and I</proc/E<lt>PIDE<gt>/maps>."
+msgstr "Ð”Ð»Ñ B<fuser> не буде вÑтановлено відповідноÑÑ‚Ñ– Ð´Ð»Ñ Ð¿Ð¾Ð²'Ñзаних файлів, зокрема Ñпільних бібліотек процеÑу, Ñкщо вони зберігаютьÑÑ Ñƒ файловій ÑиÑтемі B<btrfs>(5) через відмінніÑÑ‚ÑŒ у ідентифікаторах приÑтроїв між B<stat>(2) Ñ– I</proc/E<lt>PIDE<gt>/maps>."
+
+#. type: SH
+#: ../doc/fuser.1:301 ../doc/killall.1:170 ../doc/peekfd.1:63 ../doc/pslog.1:27
+#: ../doc/pstree.1:174
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "ТÐКОЖ ПЕРЕГЛЯÐЬТЕ"
+
+#. type: Plain text
+#: ../doc/fuser.1:310
+msgid "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+msgstr "B<kill>(1), B<killall>(1), B<stat>(2), B<btrfs>(5), B<lsof>(8), B<mount_namespaces>(7), B<pkill>(1), B<ps>(1), B<kill>(2)."
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "KILLALL"
+msgstr "KILLALL"
+
+#. type: TH
+#: ../doc/killall.1:9
+#, no-wrap
+msgid "2023-06-17"
+msgstr "17 Ñ‡ÐµÑ€Ð²Ð½Ñ 2023 року"
+
+#. type: Plain text
+#: ../doc/killall.1:12
+msgid "killall - kill processes by name"
+msgstr "killall — програма Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ процеÑів за назвою"
+
+#. type: Plain text
+#: ../doc/killall.1:38
+msgid "B<killall> [B<-Z>,B<\\ --context> I<pattern>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<TIME>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<SIGNAL>,\\ B<->I<SIGNAL>] [B<-u>,B<\\ --user> I<user>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<TIME>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<name> ..."
+msgstr "B<killall> [B<-Z>,B<\\ --context> I<взірець>] [B<-e>,B<\\ --exact>] [B<-g>,B<\\ --process-group>] [B<-i>,B<\\ --interactive>] [B<-n>,B<\\ --ns> I<PID>] [B<-o>,B<\\ --older-than> I<ЧÐС>] [B<-q>,B<\\ --quiet>] [B<-r>,B<\\ --regexp>] [B<-s>,B<\\ --signal> I<СИГÐÐЛ>,\\ B<->I<СИГÐÐЛ>] [B<-u>,B<\\ --user> I<кориÑтувач>] [B<-v>,B<\\ --verbose>] [B<-w>,B<\\ --wait>] [B<-y>,B<\\ --younger-than> I<ЧÐС>] [B<-I>,B<\\ --ignore-case>] [B<-V>,B<\\ --version>] [B<-->] I<name> ..."
+
+#. type: Plain text
+#: ../doc/killall.1:41
+msgid "B<killall> B<-l>, B<--list>"
+msgstr "B<killall> B<-l>, B<--list>"
+
+#. type: Plain text
+#: ../doc/killall.1:44
+msgid "B<killall> B<-V>,B<\\ --version>"
+msgstr "B<killall> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/killall.1:49
+msgid "B<killall> sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent."
+msgstr "B<killall> надÑилає Ñигнал уÑім процеÑам, Ñкі відповідають будь-Ñкій з вказаних команд. Якщо не вказано назву Ñигналу, процеÑам буде надіÑлано Ñигнал SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:58
+msgid "Signals can be specified either by name (e.g.\\& B<-HUP> or B<-SIGHUP>) or by number (e.g.\\& B<-1>) or by option B<-s>."
+msgstr "Сигнали можна вказувати або за назвою (наприклад B<-HUP> чи B<-SIGHUP>), або за номером (наприклад B<-1>), або за допомогою параметра B<-s>."
+
+#. type: Plain text
+#: ../doc/killall.1:65
+msgid "If the command name is not regular expression (option B<-r>) and contains a slash (B</>), processes executing that particular file will be selected for killing, independent of their name."
+msgstr "Якщо назва команди не Ñ” формальним виразом (параметр B<-r>) Ñ– міÑтить похилу риÑку (B</>), Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ буде вибрано процеÑи, Ñкі виконують вказаний файл, незалежно від назви цих процеÑів."
+
+#. type: Plain text
+#: ../doc/killall.1:72
+msgid "B<killall> returns a zero return code if at least one process has been killed for each listed command, or no commands were listed and at least one process matched the B<-u> and B<-Z> search criteria. B<killall> returns non-zero otherwise."
+msgstr "B<killall> повертає нульовий код, Ñкщо було завершено роботу принаймні одного процеÑу Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— з команд зі ÑпиÑку або у ÑпиÑку не було команд, а критеріÑм пошуку за B<-u> Ñ– B<-Z> відповідав принаймні один процеÑ. У інших випадках B<killall> повертає ненульове значеннÑ."
+
+#. type: Plain text
+#: ../doc/killall.1:78
+msgid "A B<killall> process never kills itself (but may kill other B<killall> processes)."
+msgstr "ÐŸÑ€Ð¾Ñ†ÐµÑ B<killall> ніколи не завершує Ñвою роботу (але може завершити роботу інших процеÑів B<killall>)."
+
+#. type: IP
+#: ../doc/killall.1:79
+#, no-wrap
+msgid "B<-e>, B<--exact>"
+msgstr "B<-e>, B<--exact>"
+
+#. type: Plain text
+#: ../doc/killall.1:93
+msgid "Require an exact match for very long names. If a command name is longer than 15 characters, the full name may be unavailable (i.e. it is swapped out). In this case, B<killall> will kill everything that matches within the first 15 characters. With B<-e>, such entries are skipped. B<killall> prints a message for each skipped entry if B<-v> is specified in addition to B<-e>."
+msgstr "Вимагати точної відповідноÑÑ‚Ñ– Ð´Ð»Ñ Ð´ÑƒÐ¶Ðµ довгих назв. Якщо довжина назви команди перевищує 15 Ñимволів, повна назва може бути недоÑтупною (тобто Ñ—Ñ— буде обрізано). У цьому випадку B<killall> завершить роботу уÑÑ–Ñ… процеÑів, Ñкі відповідають першим 15 Ñимволам. Якщо вказано параметр B<-e>, такі запиÑи буде пропущено. B<killall> виведе Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ пропущеного запиÑу, Ñкщо окрім B<-e> вказано B<-v>."
+
+#. type: IP
+#: ../doc/killall.1:93
+#, no-wrap
+msgid "B<-I>, B<--ignore-case>"
+msgstr "B<-I>, B<--ignore-case>"
+
+#. type: Plain text
+#: ../doc/killall.1:95
+msgid "Do case insensitive process name match."
+msgstr "Ð’Ñтановлювати відповідніÑÑ‚ÑŒ процеÑÑ– без Ð²Ñ€Ð°Ñ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру Ñимволів."
+
+#. type: IP
+#: ../doc/killall.1:95
+#, no-wrap
+msgid "B<-g>, B<--process-group>"
+msgstr "B<-g>, B<--process-group>"
+
+#. type: Plain text
+#: ../doc/killall.1:99
+msgid "Kill the process group to which the process belongs. The kill signal is only sent once per group, even if multiple processes belonging to the same process group were found."
+msgstr "Завершити уÑÑ– процеÑи у групі, до Ñкої належить знайдений процеÑ. Сигнал Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ буде надіÑлано один раз Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— з груп, навіть Ñкщо буде виÑвлено декілька процеÑів, Ñкі належать до однієї групи."
+
+#. type: Plain text
+#: ../doc/killall.1:101
+msgid "Interactively ask for confirmation before killing."
+msgstr "ÐадÑилати перед припиненнÑм роботи запит в інтерактивному режимі."
+
+#. type: IP
+#: ../doc/killall.1:101
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: IP
+#: ../doc/killall.1:103
+#, no-wrap
+msgid "B<-n>, B<--ns>"
+msgstr "B<-n>, B<--ns>"
+
+#. type: Plain text
+#: ../doc/killall.1:106
+msgid "Match against the PID namespace of the given PID. The default is to match against all namespaces."
+msgstr "Шукати у проÑторі назв PID вказаного PID. Типовою поведінкою Ñ” пошуку в уÑÑ–Ñ… проÑторах назв."
+
+#. type: IP
+#: ../doc/killall.1:106
+#, no-wrap
+msgid "B<-o>, B<--older-than>"
+msgstr "B<-o>, B<--older-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:111
+msgid "Match only processes that are older (started before) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, months and years respectively."
+msgstr "ОброблÑти лише процеÑи, Ñкі Ñ” Ñтарішими вказаного моменту чаÑу (тобто Ñ‚Ñ– процеÑи, Ñкі запущено до вказаного моменту чаÑу). Ð§Ð°Ñ Ð¼Ð°Ñ” бути вказано у форматі дійÑного чиÑла з рухомою крапкою із визначеннÑм одиниці виміру. ОдиницÑми Ñ” s, m, h, d, w, M, y, тобто Ñекунди, хвилини, години, дні, тижні, міÑÑці та роки, відповідно."
+
+#. type: IP
+#: ../doc/killall.1:111
+#, no-wrap
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: Plain text
+#: ../doc/killall.1:113
+msgid "Do not complain if no processes were killed."
+msgstr "Ðе ÑкаржитиÑÑ, Ñкщо не завершено роботу жодного процеÑу."
+
+#. type: IP
+#: ../doc/killall.1:113
+#, no-wrap
+msgid "B<-r>, B<--regexp>"
+msgstr "B<-r>, B<--regexp>"
+
+#. type: Plain text
+#: ../doc/killall.1:116
+msgid "Interpret process name pattern as a POSIX extended regular expression, per B<regex>(3)."
+msgstr "Вважати взірець назви процеÑу розширеним формальним виразом POSIX, відповідно до ÑинтакÑиÑу B<regex>(3)."
+
+#. type: IP
+#: ../doc/killall.1:116
+#, no-wrap
+msgid "B<-s>, B<--signal>, B<->I<SIGNAL>"
+msgstr "B<-s>, B<--signal>, B<->I<СИГÐÐЛ>"
+
+#. type: Plain text
+#: ../doc/killall.1:118
+msgid "Send this signal instead of SIGTERM."
+msgstr "ÐадіÑлати вказаний Ñигнал, заміÑÑ‚ÑŒ SIGTERM."
+
+#. type: Plain text
+#: ../doc/killall.1:121
+msgid "Kill only processes the specified user owns. Command names are optional."
+msgstr "Завершити роботу уÑÑ–Ñ… процеÑів, влаÑником Ñких Ñ” вказаний кориÑтувач. Ðазви команд при цьому Ñ” необов'Ñзковими."
+
+#. type: Plain text
+#: ../doc/killall.1:123
+msgid "Report if the signal was successfully sent."
+msgstr "ÐадіÑлати звіт щодо того, чи було надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñигналу уÑпішним."
+
+#. type: IP
+#: ../doc/killall.1:125
+#, no-wrap
+msgid "B<-w>, B<--wait>"
+msgstr "B<-w>, B<--wait>"
+
+#. type: Plain text
+#: ../doc/killall.1:133
+msgid "Wait for all killed processes to die. B<killall> checks once per second if any of the killed processes still exist and only returns if none are left. Note that B<killall> may wait forever if the signal was ignored, had no effect, or if the process stays in zombie state."
+msgstr "Зачекати на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ уÑÑ–Ñ… процеÑів. B<killall> раз на Ñекунду перевірÑÑ”, чи працює ÑкийÑÑŒ із процеÑів, роботу Ñких має бути завершено, Ñ– повертає керуваннÑ, лише коли у ÑпиÑку не лишитьÑÑ Ð¶Ð¾Ð´Ð½Ð¾Ð³Ð¾ процеÑу. Зауважте, що B<killall> може чекати дуже довго, Ñкщо Ñигнал було проігноровано, він не Ñпрацював, або Ñкщо Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÑƒÑ” працювати у Ñтані зомбі."
+
+#. type: IP
+#: ../doc/killall.1:133
+#, no-wrap
+msgid "B<-y>, B<--younger-than>"
+msgstr "B<-y>, B<--younger-than>"
+
+#. type: Plain text
+#: ../doc/killall.1:138
+msgid "Match only processes that are younger (started after) the time specified. The time is specified as a float then a unit. The units are s,m,h,d,w,M,y for seconds, minutes, hours, days, weeks, Months and years respectively."
+msgstr "ОброблÑти лише процеÑи, Ñкі Ñ” новішими вказаного моменту чаÑу (тобто Ñ‚Ñ– процеÑи, Ñкі запущено піÑÐ»Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ð³Ð¾ моменту чаÑу). Ð§Ð°Ñ Ð¼Ð°Ñ” бути вказано у форматі дійÑного чиÑла з рухомою крапкою із визначеннÑм одиниці виміру. ОдиницÑми Ñ” s, m, h, d, w, M, y, тобто Ñекунди, хвилини, години, дні, тижні, міÑÑці та роки, відповідно."
+
+#. type: IP
+#: ../doc/killall.1:138
+#, no-wrap
+msgid "B<-Z>, B<--context>"
+msgstr "B<-Z>, B<--context>"
+
+#. type: Plain text
+#: ../doc/killall.1:143
+msgid "Specify security context: kill only processes having security context that match with given extended regular expression pattern. Must precede other arguments on the command line. Command names are optional."
+msgstr "Визначити контекÑÑ‚ безпеки: завершити роботу лише процеÑів, Ñкі мають контекÑÑ‚ безпеки, Ñкий визначаєтьÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ð¼ формальним виразом-взірцем. Цей параметр має передувати іншим параметрам у командному Ñ€Ñдку. Ðазви команд Ñ” необов'Ñзковими."
+
+#. type: SH
+#: ../doc/killall.1:147
+#, no-wrap
+msgid "KNOWN BUGS"
+msgstr "ВІДОМІ Ð’ÐДИ"
+
+#. type: Plain text
+#: ../doc/killall.1:150
+msgid "Killing by file only works for executables that are kept open during execution, i.e. impure executables can't be killed this way."
+msgstr "Ð—Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ за файлом працює лише Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… файлів, Ñкі підтримують відкритіÑÑ‚ÑŒ файлів під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ. Інакше кажучи, роботу нечиÑтих виконуваних файлів не можна завершити у цей ÑпоÑіб."
+
+#. type: Plain text
+#: ../doc/killall.1:156
+msgid "Be warned that typing B<killall> I<name> may not have the desired effect on non-Linux systems, especially when done by a privileged user."
+msgstr "Зауважте, що команда B<killall> I<назва> може не Ñпрацювати у бажаний ÑпоÑіб у ÑиÑтемах, відмінних від Linux, оÑобливо, Ñкщо Ñ—Ñ— запущено від імені привілейованого кориÑтувача."
+
+#. type: Plain text
+#: ../doc/killall.1:160
+msgid "B<killall -w> doesn't detect if a process disappears and is replaced by a new process with the same PID between scans."
+msgstr "B<killall -w> не визначає, чи зник Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ– чи не замінено його новим процеÑом Ñ– тим Ñамим PID між ÑеанÑами ÑкануваннÑ."
+
+#. type: Plain text
+#: ../doc/killall.1:164
+msgid "If processes change their name, B<killall> may not be able to match them correctly."
+msgstr "Якщо процеÑи змінюють назву, B<killall> не зможе належним чином вÑтановити їхню відповідніÑÑ‚ÑŒ."
+
+#. type: Plain text
+#: ../doc/killall.1:170
+msgid "B<killall> has a limit of names that can be specified on the command line. This figure is the size of an unsigned long integer multiplied by 8. For most 32 bit systems the limit is 32 and similarly for a 64 bit system the limit is usually 64."
+msgstr "У B<killall> передбачено Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ назв, Ñкі може бути вказано у Ñ€Ñдку команди. Розмір визначаєтьÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ «довгого» цілого чиÑла без знаку, помноженим на 8. Ð”Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆÐ¾ÑÑ‚Ñ– 32-бітових ÑиÑтем розмір обмежено 32 Ñимволами, а Ð´Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆÐ¾ÑÑ‚Ñ– 64-бітових — 64 Ñимволами."
+
+#. type: Plain text
+#: ../doc/killall.1:178
+msgid "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<regex>(3)."
+msgstr "B<kill>(1), B<fuser>(1), B<pgrep>(1), B<pidof>(1), B<pkill>(1), B<ps>(1), B<kill>(2), B<regex>(3)."
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "PEEKFD"
+msgstr "PEEKFD"
+
+#. type: TH
+#: ../doc/peekfd.1:9
+#, no-wrap
+msgid "2021-12-01"
+msgstr "1 Ð³Ñ€ÑƒÐ´Ð½Ñ 2021 року"
+
+#. type: Plain text
+#: ../doc/peekfd.1:12
+msgid "peekfd - peek at file descriptors of running processes"
+msgstr "peekfd — програма Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´ÐµÑкрипторів файлів Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð¸Ñ… процеÑів"
+
+#. type: Plain text
+#: ../doc/peekfd.1:23
+msgid "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-c>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<pid> [I<fd>] [I<fd>] ..."
+msgstr "B<peekfd> [B<-8>,B<--eight-bit-clean>] [B<-n>,B<--no-headers>] [B<-f>,B<--follow>] [B<-d>,B<--duplicates-removed>] [B<-V>,B<--version>] [B<-h>,B<--help>] I<pid> [I<fd>] [I<fd>] ..."
+
+#. type: Plain text
+#: ../doc/peekfd.1:28
+msgid "B<peekfd> attaches to a running process and intercepts all reads and writes to file descriptors. You can specify the desired file descriptor numbers or dump all of them."
+msgstr "B<peekfd> приєднуєтьÑÑ Ð´Ð¾ запущеного процеÑу Ñ– перехоплює уÑÑ– команди Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ‚Ð° запиÑу деÑкрипторів файлів. Ви можете вказати бажані номери деÑкрипторів файлів або Ñтворити дамп уÑÑ–Ñ… команд Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ‚Ð° запиÑу."
+
+#. type: IP
+#: ../doc/peekfd.1:29
+#, no-wrap
+msgid "-8"
+msgstr "-8"
+
+#. type: Plain text
+#: ../doc/peekfd.1:31
+msgid "Do no post-processing on the bytes being read or written."
+msgstr "Ðе оброблÑти дані щодо прочитаних або запиÑаних байтів піÑÐ»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ."
+
+#. type: IP
+#: ../doc/peekfd.1:31
+#, no-wrap
+msgid "-n"
+msgstr "-n"
+
+#. type: Plain text
+#: ../doc/peekfd.1:33
+msgid "Do not display headers indicating the source of the bytes dumped."
+msgstr "Ðе показувати заголовки, Ñкі вказують на джерело дампу байтів."
+
+#. type: IP
+#: ../doc/peekfd.1:33
+#, no-wrap
+msgid "-c"
+msgstr "-c"
+
+#. type: Plain text
+#: ../doc/peekfd.1:36
+msgid "Also dump the requested file descriptor activity in any new child processes that are created."
+msgstr "Також Ñтворити дамп дій із вказаним деÑкриптором файла у будь-Ñкому новому дочірньому процеÑÑ–."
+
+#. type: IP
+#: ../doc/peekfd.1:36
+#, no-wrap
+msgid "-d"
+msgstr "-d"
+
+#. type: Plain text
+#: ../doc/peekfd.1:39
+msgid "Remove duplicate read/writes from the output. If you're looking at a tty with echo, you might want this."
+msgstr "Вилучити дублікати запиÑів щодо Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ запиÑу із виведених даних. Якщо ви переглÑдаєте дані у терміналі з повтореннÑм виведеннÑ, ймовірно, цей параметр буде кориÑним."
+
+#. type: IP
+#: ../doc/peekfd.1:39
+#, no-wrap
+msgid "-v"
+msgstr "-v"
+
+#. type: Plain text
+#: ../doc/peekfd.1:41
+msgid "Display a version string."
+msgstr "ВивеÑти Ñ€Ñдок верÑÑ–Ñ—."
+
+#. type: IP
+#: ../doc/peekfd.1:41
+#, no-wrap
+msgid "-h"
+msgstr "-h"
+
+#. type: Plain text
+#: ../doc/peekfd.1:43
+msgid "Display a help message."
+msgstr "ВивеÑти довідкове повідомленнÑ."
+
+#. type: Plain text
+#: ../doc/peekfd.1:45
+msgid "B</proc/>I<*>B</fd>"
+msgstr "B</proc/>I<*>B</fd>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:48
+msgid "Not used but useful for the user to look at to get good file descriptor numbers."
+msgstr "Ðе викориÑтовуєтьÑÑ, але Ñ” кориÑним Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів, Ñкі хочуть отримати придатні до обробки номери деÑкрипторів файлів."
+
+#. type: SH
+#: ../doc/peekfd.1:48
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "СЕРЕДОВИЩЕ"
+
+#. type: Plain text
+#: ../doc/peekfd.1:50
+msgid "None."
+msgstr "Ðічого."
+
+#. type: SH
+#: ../doc/peekfd.1:50
+#, no-wrap
+msgid "DIAGNOSTICS"
+msgstr "ДІÐГÐОСТИКÐ"
+
+#. type: Plain text
+#: ../doc/peekfd.1:52
+msgid "The following diagnostics may be issued on stderr:"
+msgstr "До stderr може бути ÑпрÑмовано такі діагноÑтичні дані:"
+
+#. type: TP
+#: ../doc/peekfd.1:52
+#, no-wrap
+msgid "B<Error attaching to pid >I<E<lt>PIDE<gt>>"
+msgstr "B<Помилка під Ñ‡Ð°Ñ Ð´Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ pid >I<E<lt>PIDE<gt>>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:56
+msgid "An unknown error occurred while attempted to attach to a process, you may need to be root."
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñпроби приєднатиÑÑ Ð´Ð¾ процеÑу. Ймовірно, вам потрібні права доÑтупу кориÑтувача root."
+
+#. type: Plain text
+#: ../doc/peekfd.1:59
+msgid "Probably lots. Don't be surprised if the process you are monitoring dies."
+msgstr "Ймовірно, вад дуже багато. Ðічого дивного не ÑтанетьÑÑ, Ñкщо процеÑ, за Ñким ви ведете ÑпоÑтереженнÑ, неÑподівано завершить роботу."
+
+#. type: SH
+#: ../doc/peekfd.1:59 ../doc/pslog.1:31
+#, no-wrap
+msgid "AUTHOR"
+msgstr "ÐВТОР"
+
+#. type: Plain text
+#: ../doc/peekfd.1:63
+msgid "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+msgstr "E<.MT trent.waddington@gmail.com> Trent Waddington E<.ME>"
+
+#. type: Plain text
+#: ../doc/peekfd.1:64
+msgid "B<ttysnoop>(8)"
+msgstr "B<ttysnoop>(8)"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "PSLOG"
+msgstr "PSLOG"
+
+#. type: TH
+#: ../doc/pslog.1:9 ../doc/prtstat.1:9
+#, no-wrap
+msgid "2020-09-09"
+msgstr "9 вереÑÐ½Ñ 2020 року"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux\""
+msgstr "Linux"
+
+#. type: TH
+#: ../doc/pslog.1:9
+#, no-wrap
+msgid "Linux User's Manual"
+msgstr "Підручник кориÑтувача Linux"
+
+#. type: Plain text
+#: ../doc/pslog.1:12
+msgid "pslog - report current logs path of a process"
+msgstr "pslog — програма Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑˆÐ»Ñху до файла журналу вказаного процеÑу"
+
+#. type: Plain text
+#: ../doc/pslog.1:16
+msgid "B<pslog> I<pid> \\&...\""
+msgstr "B<pslog> I<pid> \\&...\""
+
+#. type: Plain text
+#: ../doc/pslog.1:18
+msgid "B<pslog -V>"
+msgstr "B<pslog -V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:23
+msgid "The B<pslog> command reports the current working logs of a process."
+msgstr "Програма B<pslog> визначає поточний файл журналу Ð´Ð»Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ð³Ð¾ процеÑу."
+
+#. type: IP
+#: ../doc/pslog.1:24 ../doc/pstree.1:163
+#, no-wrap
+msgid "B<-V>"
+msgstr "B<-V>"
+
+#. type: Plain text
+#: ../doc/pslog.1:31
+msgid "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+msgstr "B<pgrep>(1), B<ps>(1), B<pwdx>(1)."
+
+#. type: Plain text
+#: ../doc/pslog.1:40
+msgid "Vito Mule\\(cq E<.MT mulevito@gmail.com> E<.ME> wrote B<pslog> in 2015. Please send bug reports to E<.MT mulevito@gmail.com> E<.ME .>"
+msgstr "Vito Mule\\(cq€™ E<.MT mulevito@gmail.com> E<.ME> напиÑав B<pslog> у 2015 році. Будь лаÑка, надÑилайте Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вади на адреÑу E<.MT mulevito@gmail.com> E<.ME .>"
+
+#. type: TH
+#: ../doc/prtstat.1:9
+#, no-wrap
+msgid "PRTSTAT"
+msgstr "PRTSTAT"
+
+#. type: Plain text
+#: ../doc/prtstat.1:12
+msgid "prtstat - print statistics of a process"
+msgstr "prtstat — програма Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ ÑтатиÑтичних даних щодо вказаного процеÑу"
+
+#. type: Plain text
+#: ../doc/prtstat.1:17
+msgid "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+msgstr "B<prtstat> [B<-r>|B<--raw>] I<pid>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:20
+msgid "B<prtstat> B<-V>|B<--version>"
+msgstr "B<prtstat> B<-V>|B<--version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:27
+msgid "B<prtstat> prints the statistics of the specified process. This information comes from the B</proc/>I<pid>B</stat> file."
+msgstr "B<prtstat> виводить ÑтатиÑтичні дані щодо вказаного процеÑу. Програма викориÑтовує дані з файла B</proc/>I<pid>B</stat>."
+
+#. type: TP
+#: ../doc/prtstat.1:28
+#, no-wrap
+msgid "B<-r>,B<\\ --raw>"
+msgstr "B<-r>,B<\\ --raw>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:31
+msgid "Print the information in raw format."
+msgstr "ВивеÑти дані у необробленому форматі."
+
+#. type: TP
+#: ../doc/prtstat.1:31
+#, no-wrap
+msgid "B<-V>,B<\\ --version>"
+msgstr "B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:35
+msgid "Show the version information for B<prtstat>."
+msgstr "ВивеÑти відомоÑÑ‚Ñ– щодо верÑÑ–Ñ— B<prtstat>."
+
+#. type: TP
+#: ../doc/prtstat.1:36
+#, no-wrap
+msgid "B</proc/>I<pid>B</stat>"
+msgstr "B</proc/>I<pid>B</stat>"
+
+#. type: Plain text
+#: ../doc/prtstat.1:40
+msgid "source of the information B<prtstat> uses."
+msgstr "джерело відомоÑтей, Ñке викориÑтовує B<prtstat>."
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "PSTREE"
+msgstr "PSTREE"
+
+#. type: TH
+#: ../doc/pstree.1:9
+#, no-wrap
+msgid "2021-06-21"
+msgstr "21 Ñ‡ÐµÑ€Ð²Ð½Ñ 2021 року"
+
+#. type: Plain text
+#: ../doc/pstree.1:12
+msgid "pstree - display a tree of processes"
+msgstr "pstree — програма Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ ієрархії процеÑів"
+
+#. type: Plain text
+#: ../doc/pstree.1:32
+msgid "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<attr>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<ns>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<user>]"
+msgstr "B<pstree> [B<-a>,B<\\ --arguments>] [B<-c>,B<\\ --compact-not>] [B<-C>,B<\\ --color\\ >I<атрибут>] [B<-g>,B<\\ --show-pgids>] [B<-h>,B<\\ --highlight-all>,B<\\ -H>I<\\ pid>,B<\\ --highlight-pid\\ >I<pid>] [B<-l>,B<\\ --long>] [B<-n>,B<\\ --numeric-sort>] [B<-N>,B<\\ --ns-sort\\ >I<чу>] [B<-p>,B<\\ --show-pids>] [B<-s>,B<\\ --show-parents>] [B<-S>,B<\\ --ns-changes>] [B<-t>,B<\\ --thread-names>] [B<-T>,B<\\ --hide-threads>] [B<-u>,B<\\ --uid-changes>] [B<-Z>,B<\\ --security-context>] [B<-A>,B<\\ --ascii>,B<\\ -G>,B<\\ --vt100>,B<\\ -U>,B<\\ --unicode>] [I<pid>,B<\\ >I<кориÑтувач>]"
+
+#. type: Plain text
+#: ../doc/pstree.1:35
+msgid "B<pstree> B<-V>,B<\\ --version>"
+msgstr "B<pstree> B<-V>,B<\\ --version>"
+
+#. type: Plain text
+#: ../doc/pstree.1:46
+msgid "B<pstree> shows running processes as a tree. The tree is rooted at either I<pid> or B<init> if I<pid> is omitted. If a user name is specified, all process trees rooted at processes owned by that user are shown."
+msgstr "B<pstree> показує ієрархію запущених процеÑів. Коренем дерева вважатиметьÑÑ I<pid> або B<init>, Ñкщо I<pid> не вказано. Якщо вказано ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, уÑÑ– ієрархії процеÑів матимуть корінь у процеÑах, влаÑником Ñких Ñ” вказаний кориÑтувач."
+
+#. type: Plain text
+#: ../doc/pstree.1:50
+msgid "B<pstree> visually merges identical branches by putting them in square brackets and prefixing them with the repetition count, e.g."
+msgstr "B<pstree> візуально об'єднує ідентичні гілки, беручи їхні запиÑи у квадратні дужки Ñ– додаючи лічильник повторень. Приклад:"
+
+#. type: Plain text
+#: ../doc/pstree.1:56
+#, no-wrap
+msgid ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+msgstr ""
+" init-+-getty\n"
+" |-getty\n"
+" |-getty\n"
+" `-getty\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:59
+msgid "becomes"
+msgstr "перетворюєтьÑÑ Ð½Ð°"
+
+#. type: Plain text
+#: ../doc/pstree.1:62
+#, no-wrap
+msgid " init---4*[getty]\n"
+msgstr " init---4*[getty]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:68
+msgid "Child threads of a process are found under the parent process and are shown with the process name in curly braces, e.g."
+msgstr "Дочірні гілки процеÑу буде показано під батьківÑьким процеÑом із назвою процеÑу у фігурних дужках. Приклад:"
+
+#. type: Plain text
+#: ../doc/pstree.1:71
+#, no-wrap
+msgid " icecast2---13*[{icecast2}]\n"
+msgstr " icecast2---13*[{icecast2}]\n"
+
+#. type: Plain text
+#: ../doc/pstree.1:82
+msgid "If B<pstree> is called as B<pstree.x11> then it will prompt the user at the end of the line to press return and will not return until that has happened. This is useful for when B<pstree> is run in a xterminal."
+msgstr "Якщо B<pstree> викликано Ñк B<pstree.x11>, програма наприкінці Ñ€Ñдка надішле кориÑтувачеві запит щодо натиÑÐºÐ°Ð½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÑ– Enter Ñ– не поверне керуваннÑ, доки цього не ÑтанетьÑÑ. Такий варіант роботи Ñ” кориÑним, Ñкщо B<pstree> запущено у графічному терміналі."
+
+#. type: Plain text
+#: ../doc/pstree.1:88
+msgid "Certain kernel or mount parameters, such as the I<hidepid> option for procfs, will hide information for some processes. In these situations B<pstree> will attempt to build the tree without this information, showing process names as question marks."
+msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿ÐµÐ²Ð½Ð¸Ñ… Ñдер та параметрів монтуваннÑ, зокрема параметра I<hidepid> Ð´Ð»Ñ procfs, може призвеÑти до Ð¿Ñ€Ð¸Ñ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо деÑких процеÑів. У таких випадках B<pstree> намагатиметьÑÑ Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ ієрархію без цих даних, показуючи назви процеÑів за допомогою Ñимволів знаку питаннÑ."
+
+#. type: IP
+#: ../doc/pstree.1:90
+#, no-wrap
+msgid "B<-a>"
+msgstr "B<-a>"
+
+#. type: Plain text
+#: ../doc/pstree.1:95
+msgid "Show command line arguments. If the command line of a process is swapped out, that process is shown in parentheses. B<-a> implicitly disables compaction for processes but not threads."
+msgstr "Показувати аргументи Ñ€Ñдка команди. Якщо Ñ€Ñдок команди процеÑу вивантажено, запиÑу процеÑу буде показано у дужках. B<-a> неÑвним чином вимикає ÑƒÑ‰Ñ–Ð»ÑŒÐ½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑів, але не Ð´Ð»Ñ Ð³Ñ–Ð»Ð¾Ðº."
+
+#. type: IP
+#: ../doc/pstree.1:95
+#, no-wrap
+msgid "B<-A>"
+msgstr "B<-A>"
+
+#. type: Plain text
+#: ../doc/pstree.1:97
+msgid "Use ASCII characters to draw the tree."
+msgstr "ВикориÑтовувати Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ–Ñ”Ñ€Ð°Ñ€Ñ…Ñ–Ñ— Ñимволи ASCII."
+
+#. type: Plain text
+#: ../doc/pstree.1:100
+msgid "Disable compaction of identical subtrees. By default, subtrees are compacted whenever possible."
+msgstr "Вимкнути ÑƒÑ‰Ñ–Ð»ÑŒÐ½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… гілок ієрархії. Типово, програма ущільнює гілки, Ñкщо це можливо."
+
+#. type: IP
+#: ../doc/pstree.1:100
+#, no-wrap
+msgid "B<-C>"
+msgstr "B<-C>"
+
+#. type: Plain text
+#: ../doc/pstree.1:105
+msgid "Color the process name by given attribute. Currently B<pstree> only accepts the value B<age> which colors by process age. Processes newer than 60 seconds are green, newer than an hour yellow and the remaining red."
+msgstr "Розфарбувати назви процеÑів за заданими атрибутами. У поточній верÑÑ–Ñ— B<pstree> передбачено підтримку лише Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ B<age>, викориÑÑ‚Ð°Ð½Ð½Ñ Ñкого розфарбовує процеÑи за віком. ПроцеÑи, Ñкі Ñ” новішими за 60 Ñекунд, буде показано зеленим, новіші за годину — жовтим, а решту — червоним кольором."
+
+#. type: IP
+#: ../doc/pstree.1:105
+#, no-wrap
+msgid "B<-g>"
+msgstr "B<-g>"
+
+#. type: Plain text
+#: ../doc/pstree.1:109
+msgid "Show PGIDs. Process Group IDs are shown as decimal numbers in parentheses after each process name. If both PIDs and PGIDs are displayed then PIDs are shown first."
+msgstr "Показувати PGID. Ідентифікатори груп процеÑів (PGID) буде показано у форматі деÑÑткових чиÑел у дужках піÑÐ»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— назви процеÑу. Якщо має бути показано одночаÑно PID та PGID, PID буде показано першими."
+
+#. type: IP
+#: ../doc/pstree.1:109
+#, no-wrap
+msgid "B<-G>"
+msgstr "B<-G>"
+
+#. type: Plain text
+#: ../doc/pstree.1:111
+msgid "Use VT100 line drawing characters."
+msgstr "ВикориÑтовувати Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ Ñимволи VT100."
+
+#. type: IP
+#: ../doc/pstree.1:111
+#, no-wrap
+msgid "B<-h>"
+msgstr "B<-h>"
+
+#. type: Plain text
+#: ../doc/pstree.1:115
+msgid "Highlight the current process and its ancestors. This is a no-op if the terminal doesn't support highlighting or if neither the current process nor any of its ancestors are in the subtree being shown."
+msgstr "ПідÑвічувати поточний Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ– його Ñпадкоємців. Ðе працює, Ñкщо у терміналі не передбачено підÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ до показаної ієрархії не входить жоден з поточний процеÑів та його Ñпадкоємців."
+
+#. type: IP
+#: ../doc/pstree.1:115
+#, no-wrap
+msgid "B<-H>"
+msgstr "B<-H>"
+
+#. type: Plain text
+#: ../doc/pstree.1:125
+msgid "Like B<-h>, but highlight the specified process instead. Unlike with B<-h>, B<pstree> fails when using B<-H> if highlighting is not available."
+msgstr "Подібний до B<-h>, але буде підÑвічено вказаний процеÑ. Ðа відміну від команди з параметром B<-h>, B<pstree> завершує роботу повідомленнÑм щодо помилки, Ñкщо викориÑтано B<-H>, Ñ– підÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ Ñ” недоÑтупним."
+
+#. type: IP
+#: ../doc/pstree.1:125
+#, no-wrap
+msgid "B<-l>"
+msgstr "B<-l>"
+
+#. type: Plain text
+#: ../doc/pstree.1:129
+msgid "Display long lines. By default, lines are truncated to either the COLUMNS environment variable or the display width. If neither of these methods work, the default of 132 columns is used."
+msgstr "Показувати довгі Ñ€Ñдки. Типово, Ñ€Ñдки буде обрізано на Ñимволі, Ñкий визначаєтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм змінної Ñередовища COLUMNS, або на Ñимволі, Ñкий визначаєтьÑÑ ÑˆÐ¸Ñ€Ð¸Ð½Ð¾ÑŽ диÑплеÑ. Якщо жодне з цих значень не визначено, Ñ€Ñдки буде обрізано на позиції 132."
+
+#. type: IP
+#: ../doc/pstree.1:129
+#, no-wrap
+msgid "B<-n>"
+msgstr "B<-n>"
+
+#. type: Plain text
+#: ../doc/pstree.1:132
+msgid "Sort processes with the same parent by PID instead of by name. (Numeric sort.)"
+msgstr "УпорÑдкувати процеÑи із однаковим батьківÑьким запиÑом за PID, а не за назвою. (ЧиÑлове упорÑдковуваннÑ.)"
+
+#. type: IP
+#: ../doc/pstree.1:132
+#, no-wrap
+msgid "B<-N>"
+msgstr "B<-N>"
+
+#. type: Plain text
+#: ../doc/pstree.1:139
+msgid "Show individual trees for each namespace of the type specified. The available types are: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Regular users don't have access to other users' processes information, so the output will be limited."
+msgstr "Показувати окремі ієрархії Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ проÑтору назв визначеного типу Можливими значеннÑми типу Ñ” такі: I<ipc>, I<mnt>, I<net>, I<pid>, I<time>, I<user>, I<uts>. Звичайні кориÑтувачі не мають доÑтупу до даних щодо процеÑів інших кориÑтувачів, тому виведені дані будуть доволі обмеженими."
+
+#. type: IP
+#: ../doc/pstree.1:139
+#, no-wrap
+msgid "B<-p>"
+msgstr "B<-p>"
+
+#. type: Plain text
+#: ../doc/pstree.1:144
+msgid "Show PIDs. PIDs are shown as decimal numbers in parentheses after each process name. B<-p> implicitly disables compaction."
+msgstr "Показувати PID. PID буде показано Ñк деÑÑткові чиÑла у дужках піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ процеÑу. ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° B<-p> неÑвним чином вимикає ущільненнÑ."
+
+#. type: IP
+#: ../doc/pstree.1:144
+#, no-wrap
+msgid "B<-s>"
+msgstr "B<-s>"
+
+#. type: Plain text
+#: ../doc/pstree.1:146
+msgid "Show parent processes of the specified process."
+msgstr "Показати батьківÑькі процеÑи вказаного процеÑу."
+
+#. type: IP
+#: ../doc/pstree.1:146
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../doc/pstree.1:149
+msgid "Show namespaces transitions. Like B<-N>, the output is limited when running as a regular user."
+msgstr "Показати переходи проÑторів назв. Подібний до B<-N>. Якщо команду віддано від імені звичайного кориÑтувача, виведені дані будуть доволі обмеженими."
+
+#. type: IP
+#: ../doc/pstree.1:149
+#, no-wrap
+msgid "B<-t>"
+msgstr "B<-t>"
+
+#. type: Plain text
+#: ../doc/pstree.1:151
+msgid "Show full names for threads when available."
+msgstr "Показувати повні назви гілок, Ñкщо такі доÑтупні."
+
+#. type: IP
+#: ../doc/pstree.1:151
+#, no-wrap
+msgid "B<-T>"
+msgstr "B<-T>"
+
+#. type: Plain text
+#: ../doc/pstree.1:153
+msgid "Hide threads and only show processes."
+msgstr "Приховати гілки Ñ– показати лише процеÑи."
+
+#. type: IP
+#: ../doc/pstree.1:153
+#, no-wrap
+msgid "B<-u>"
+msgstr "B<-u>"
+
+#. type: Plain text
+#: ../doc/pstree.1:157
+msgid "Show uid transitions. Whenever the uid of a process differs from the uid of its parent, the new uid is shown in parentheses after the process name."
+msgstr "Показати переходи uid. Якщо uid процеÑу відрізнÑєтьÑÑ Ð²Ñ–Ð´ uid батьківÑького процеÑу, новий uid буде показано у дужках піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ процеÑу."
+
+#. type: IP
+#: ../doc/pstree.1:157
+#, no-wrap
+msgid "B<-U>"
+msgstr "B<-U>"
+
+#. type: Plain text
+#: ../doc/pstree.1:163
+msgid "Use UTF-8 (Unicode) line drawing characters. Under Linux 1.1-54 and above, UTF-8 mode is entered on the console with B<echo -e '\\033%8'> and left with B<echo -e '\\033%@'>."
+msgstr "ВикориÑтовувати Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ Ñимволи UTF-8 (Unicode). У Linux 1.1-54 Ñ– новіших верÑÑ–ÑÑ… увійти до режиму UTF-8 у конÑолі можна за допомогою команди B<echo -e '\\033%8'>, а вийти — за допомогою команди B<echo -e '\\033%@'>."
+
+#. type: IP
+#: ../doc/pstree.1:165
+#, no-wrap
+msgid "B<-Z>"
+msgstr "B<-Z>"
+
+#. type: Plain text
+#: ../doc/pstree.1:168
+msgid "Show the current security attributes of the process. For SELinux systems this will be the security context."
+msgstr "Показувати поточні атрибути захиÑту процеÑу. Ð”Ð»Ñ ÑиÑтем SELinux це буде контекÑÑ‚ безпеки."
+
+#. type: Plain text
+#: ../doc/pstree.1:174
+msgid "Some character sets may be incompatible with the VT100 characters."
+msgstr "ДеÑкі набори Ñимволів можуть бути неÑуміÑні із набором Ñимволів VT100."
+
+#. type: Plain text
+#: ../doc/pstree.1:177
+msgid "B<ps>(1), B<top>(1), B<proc>(5)."
+msgstr "B<ps>(1), B<top>(1), B<proc>(5)."
+
+#, no-wrap
+#~ msgid "2021-01-11"
+#~ msgstr "11 ÑÑ–Ñ‡Ð½Ñ 2021 року"
+
+#~ msgid "B<killall> -l"
+#~ msgstr "B<killall> -l"
+
+#~ msgid "B<->"
+#~ msgstr "B<->"
+
+#~ msgid "Reset all options and set the signal back to SIGKILL."
+#~ msgstr "Скинути уÑÑ– параметри Ñ– вÑтановити типовий Ñигнал — SIGKILL."
+
+#~ msgid "(SELinux) Show security context for each process. This flag will only work if B<pstree> is compiled with SELinux support."
+#~ msgstr "(SELinux) Показати контекÑÑ‚ безпеки Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ процеÑу. Цей прапорець працюватиме, лише Ñкщо B<pstree> зібрано із підтримкою SELinux."
diff --git a/man-po/uk/fuser.1 b/man-po/uk/fuser.1
new file mode 100644
index 0000000..02c868a
--- /dev/null
+++ b/man-po/uk/fuser.1
@@ -0,0 +1,229 @@
+.\"
+.\" Copyright 1993-2005 Werner Almesberger
+.\" 2005-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FUSER 1 "2 лиÑтопада 2022 року" psmisc "Команди кориÑтувача"
+.SH ÐÐЗВÐ
+fuser — програма Ð´Ð»Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— процеÑів на оÑнові файлів або Ñокетів
+.SH "КОРОТКИЙ ОПИС"
+.ad l
+\fBfuser\fP [\fB\-fuv\fP] [\fB\-a\fP|\fB\-s\fP] [\fB\-4\fP|\fB\-6\fP] [\fB\-c\fP|\fB\-m\fP|\fB\-n\fP
+\fIпроÑÑ‚Ñ–Ñ€\fP] [\fB\ \-k\fP [\fB\-i\fP] [\fB\-M\fP] [\fB\-w\fP] [\fB\-\fP\fIСИГÐÐЛ\fP] ] \fIназва\fP ...
+.br
+\fBfuser \-l\fP
+.br
+\fBfuser \-V\fP
+.ad b
+.SH ОПИС
+\fBfuser\fP виводить дані щодо PID процеÑів на оÑнові вказаних файлів або
+файлових ÑиÑтем. У типовому режимі показу піÑÐ»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— назви файла буде
+вказано літеру, Ñка вказуватиме на тип доÑтупу:
+.PP
+.RS
+.PD 0
+.TP
+\fBc\fP
+поточний каталог.
+.TP
+\fBe\fP
+виконуваний файл, Ñкий запуÑкаєтьÑÑ.
+.TP
+\fBf\fP
+відкрити файл. \fBf\fP буде пропущено у типовому режимі показу.
+.TP
+\fBF\fP
+відкрити файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу. \fBF\fP буде пропущено у типовому режимі показу.
+.TP
+\fBr\fP
+Кореневий каталог.
+.TP
+\fBm\fP
+пов'Ñзаний mmap файл або бібліотека Ñпільного викориÑтаннÑ.
+.TP
+\&\fB.\fP
+Замінник, буде пропущено у типовому режимі показу.
+.PD
+.RE
+.LP
+\fBfuser\fP повертає ненульовий код, Ñкщо програмі не вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ доÑтуп
+до жодного з вказаних файлів або Ñкщо трапитьÑÑ ÐºÑ€Ð¸Ñ‚Ð¸Ñ‡Ð½Ð° помилка. Якщо
+вдаÑÑ‚ÑŒÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ доÑтуп хоча б до одного з файлів, \fBfuser\fP повертає нуль.
+.PP
+З метою пошуку процеÑів з викориÑтаннÑм Ñокетів TCP та UDP Ñлід вибрати
+відповідний проÑÑ‚Ñ–Ñ€ назв за допомогою параметра \fB\-n\fP. Типово, \fBfuser\fP
+шукатиме Ñеред Ñокетів IPv6 та IPv4. Щоб змінити типову поведінку,
+ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ \fB\-4\fP або \fB\-6\fP. Сокети можна задати за локальним
+або віддаленим портом та віддалено адреÑою. УÑÑ– Ð¿Ð¾Ð»Ñ Ñ” необов'Ñзковим, але
+коми перед пропущеними полÑми Ñлід Ñтавити:
+.PP
+[\fIlcl_port\fP][,[\fIrmt_host\fP][,[\fIrmt_port\fP]]]
+.PP
+Ð”Ð»Ñ IP\-Ð°Ð´Ñ€ÐµÑ Ñ‚Ð° номерів портів можна викориÑтовувати Ñимволічні або чиÑлові
+значеннÑ.
+.PP
+\fBfuser\fP виводить до Ñтандартного Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ PID, уÑÑ– інші дані буде
+надіÑлано до stderr.
+.SH ПÐРÐМЕТРИ
+.TP
+\fB\-a\fP, \fB\-\-all\fP
+Показати уÑÑ– файли, Ñкі вказано у Ñ€Ñдку команди. Типово, буде показано лише
+файли, доÑтуп до Ñких має принаймні один процеÑ.
+.TP
+\fB\-c\fP
+Те Ñаме, що Ñ– параметр \fB\-m\fP, викориÑтовуєтьÑÑ Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ– з POSIX.
+.TP
+\fB\-f\fP
+Буде проігноровано. ВикориÑтовуєтьÑÑ Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ– з POSIX.
+.TP
+\fB\-k\fP, \fB\-\-kill\fP
+Завершити роботу процеÑів, Ñкі мають доÑтуп до файла. Якщо не було внеÑено
+змін до назви Ñигналу за допомогою параметра \fB\-\fP\fIСИГÐÐЛ\/\fP, буде надіÑлано
+Ñигнал SIGKILL. ÐŸÑ€Ð¾Ñ†ÐµÑ \fBfuser\fP не може завершити Ñвою роботу, але може
+завершити роботу іншого процеÑу \fBfuser\fP. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ідентифікатора
+кориÑтувача процеÑу, у Ñкому виконуєтьÑÑ \fBfuser\fP, буде вÑтановлено
+відповідно до Ñправжнього ідентифікатор до того, Ñк програма Ñпробує
+перервати роботу іншої програми.
+.TP
+\fB\-i\fP, \fB\-\-interactive\fP
+Запитати кориÑтувача щодо Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð´Ñ–Ñ— до Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸
+процеÑу. Цей параметр буде проігноровано, Ñкщо не вказано параметр \fB\-k\fP.
+.TP
+\fB\-I\fP, \fB\-\-inode\fP
+Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñтору назв \fBfile\fP викориÑтовувати порівнÑÐ½Ð½Ñ Ð½Ð° оÑнові inode
+вказаних файлів, а не назв файлів, навіть у мережевих файлових ÑиÑтемах.
+.TP
+\fB\-l\fP, \fB\-\-list\-signals\fP
+ВивеÑти ÑпиÑок уÑÑ–Ñ… відомих назв Ñигналів.
+.TP
+\fB\-m\fP\fI ÐÐЗВÐ\fP, \fB\-\-mount \fP\fIÐÐЗВÐ\fP
+\fIÐÐЗВÐ\fP визначає файл на змонтованій файловій ÑиÑтемі або блоковий
+приÑтрій, Ñкий змонтовано. Буде виведено ÑпиÑок уÑÑ–Ñ… процеÑів, Ñкі отримали
+доÑтуп до файлів на цій файловій ÑиÑтемі. Якщо вказано каталог, назву буде
+автоматично замінено на \fIÐÐЗВÐ\fP/, Ñ– програма ÑкориÑтаєтьÑÑ Ð±ÑƒÐ´ÑŒ\-Ñкою
+файловою ÑиÑтемою, Ñку може бути змонтовано до цього каталогу.
+.TP
+\fB\-M\fP, \fB\-\-ismountpoint\fP
+Запит буде виконано, лише Ñкщо \fIÐÐЗВÐ\fP вказує на точку монтуваннÑ. Це
+чудовий паÑок безпеки, Ñкий не даÑÑ‚ÑŒ вам завершити роботу віртуальної
+машини, Ñкщо \fIÐÐЗВÐ\fP, раптом, не вказуватиме на файлову ÑиÑтему.
+.TP
+\fB\-w\fP
+Завершити роботу лише процеÑів, Ñкі мають доÑтуп до запиÑу. Цей параметр
+буде проігноровано, Ñкщо не вказано параметр \fB\-k\fP.
+.TP
+\fB\-n\fP \fIПРОСТІР_ÐÐЗВ\fP, \fB\-\-namespace\fP \fIПРОСТІР_ÐÐЗВ\fP
+Вибрати інший проÑÑ‚Ñ–Ñ€ назв. Передбачено підтримку проÑторів назв \fBfile\fP
+(назви файлів, типовий), \fBudp\fP (локальні порти UDP) та \fBtcp\fP (локальні
+порти TCP). Порти можна вказувати за допомогою Ñимволічної назви або номеру
+порту. Якщо немає неоднозначноÑтей, можна кориÑтуватиÑÑ Ñкороченою формою
+запиÑу: \fIназва\fP\fB/\fP\fIпроÑÑ‚Ñ–Ñ€\fP (наприклад \fI80\fP\fB/\fP\fItcp\fP).
+.TP
+\fB\-s\fP, \fB\-\-silent\fP
+Виконати дію без Ñповіщень щодо виконаннÑ. У цьому режимі параметри \fB\-u\fP та
+\fB\-v\fP буде проігноровано. \fB\-a\fP не Ñлід викориÑтовувати разом із \fB\-s\fP.
+.TP
+\fB\-\fP\fIСИГÐÐЛ\fP
+ВикориÑтовувати вказаний Ñигнал заміÑÑ‚ÑŒ SIGKILL Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸
+процеÑів. Сигнали можна вказувати або за назвою (наприклад \fB\-HUP\fP), або за
+номером (наприклад \fB\-1\fP). Цей параметр буде проігноровано, Ñкщо не
+викориÑтано параметр \fB\-k\fP.
+.TP
+\fB\-u\fP, \fB\-\-user\fP
+ДопиÑувати ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\-влаÑника процеÑу до кожного PID.
+.TP
+\fB\-v\fP, \fB\-\-verbose\fP
+Режим докладних повідомлень. ПроцеÑи буде показано у Ñтилі \fBps\fP. ЗначеннÑ
+вміÑту полів PID, USER та COMMAND Ñ” тим Ñамим, що Ñ– у \fBps\fP. У полі ACCESS
+буде показано ÑпоÑіб доÑтупу процеÑу до файла. У докладному режимі також
+буде показано, чи виконано доÑтуп до певного файла Ñк до точки доÑтупу,
+екÑпортованих даних knfs або файла резервної пам'ÑÑ‚Ñ–. У цьому випадку
+заміÑÑ‚ÑŒ PID буде показано Ð·Ð°Ð¿Ð¸Ñ \fBkernel\fP.
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Показати інформацію щодо верÑÑ–Ñ—.
+.TP
+\fB\-4\fP, \fB\-\-ipv4\fP
+Шукати Ñеред Ñокетів IPv4. Цей параметр не Ñлід викориÑтовувати разом із
+параметром \fB\-6\fP. Він працює лише Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторів назв tcp та udp.
+.TP
+\fB\-6\fP, \fB\-\-ipv6\fP
+Шукати Ñеред Ñокетів IPv6. Цей параметр не Ñлід викориÑтовувати разом із
+параметром \fB\-4\fP. Він працює лише Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторів назв tcp та udp.
+.SH ФÐЙЛИ
+.TP
+/proc
+Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми процеÑів
+.SH ПРИКЛÐДИ
+.TP
+\fBfuser \-km /home\fP
+завершує роботу уÑÑ–Ñ… процеÑів, Ñкі у будь\-Ñкий ÑпоÑіб мають доÑтуп до
+файлової ÑиÑтеми /home.
+.TP
+\fBif fuser \-s /dev/ttyS1; then :; else \fP\fIкоманда\fP\fB; fi\fP
+викликає \fIкоманду\fP, Ñкщо жоден інший Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ викориÑтовує /dev/ttyS1.
+.TP
+\fBfuser telnet/tcp\fP
+виводить ÑпиÑок уÑÑ–Ñ… процеÑів на (локальному) порту TELNET.
+.SH ОБМЕЖЕÐÐЯ
+ПроцеÑи, Ñкі отримують доÑтуп до того Ñамого файла бо файлової ÑиÑтеми
+декілька разів, буде показано Ñк один запиÑ.
+.PP
+Якщо той Ñамий об'єкт у Ñ€Ñдку команди вказано декілька разів, деÑкі із
+запиÑів об'єкта може бути проігноровано.
+.PP
+Якщо \fBfuser\fP запущено від імені звичайного кориÑтувача, програма зможе
+отримати доÑтуп лише до чаÑтини даних. ÐаÑлідком цього Ñ” те, що файли, Ñкі
+відкрито процеÑами інших кориÑтувачів, можуть не потрапити до ÑпиÑку, а
+виконувані файли може бути клаÑифіковано Ñк такі, що лише пов'Ñзані із
+файлом.
+.PP
+\fBfuser\fP не зможе включити до звіту дані жодного з тих процеÑів, доÑтуп до
+таблиці деÑкрипторів файлів Ñких обмежено правами доÑтупу. ÐайчаÑтіше
+подібна проблема виникає, Ñкщо виконуєтьÑÑ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ° Ñокетів TCP або UDP від
+імені кориÑтувача, Ñкий не має прав доÑтупу адмініÑтратора (root). У таких
+випадках \fBfuser\fP повідомить про те, що не має доÑтупу до потрібних програмі
+даних.
+.PP
+Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ \fBfuser\fP SUID root може запобігти проблемам із доÑтупом до
+даних, але Ñ” небажаним із міркувань безпеки та конфіденційноÑÑ‚Ñ–.
+.PP
+Пошук Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторів назв \fBudp\fP та \fBtcp\fP, а також Ñокетів доменів UNIX не
+можна виконувати, Ñкщо Ñдро ÑиÑтеми має верÑÑ–ÑŽ, Ñка Ñ” Ñтарішою за 1.3.78.
+.PP
+ДоÑтупи Ñдра буде показано, лише Ñкщо викориÑтано параметр \fB\-v\fP.
+.PP
+Параметр \fB\-k\fP працює лише Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑів. Якщо кориÑтувачем Ñ” kernel,
+\fBfuser\fP виведе повідомленнÑ\-пораду, але не виконуватиме ніÑких дій щодо
+Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ процеÑу.
+.PP
+\fBfuser\fP не бачитиме блокові приÑтрої, Ñкі змонтовано процеÑами у інших
+проÑторах назв монтуваннÑ. Причиною Ñ” те, що ідентифікатор приÑтрою, Ñкий
+показано у таблиці деÑкрипторів файлів процеÑу, належить до проÑтору назв
+процеÑу, а не проÑтору назв fuser; тобто він не збігаєтьÑÑ Ð· потрібним.
+.SH Ð’ÐДИ
+.PP
+\fBfuser \-m /dev/sgX\fP покаже (або завершить роботу, Ñкщо було вказано
+параметр \fB\-k\fP) уÑÑ– процеÑи, навіть Ñкщо приÑтрій не налаштовано. Можуть
+бути Ñ– інші приÑтрої, Ð´Ð»Ñ Ñких така команда теж працюватиме.
+.PP
+Якщо буде вказано параметр Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ \fB\-m\fP, програма працюватиме із уÑіма
+файлами на приÑтрої, Ñкі за назвою збігатимутьÑÑ Ð·Ñ– вказаним
+файлом. СкориÑтайтеÑÑ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ð¼ параметром \fB\-M\fP, Ñкщо вам потрібні дані
+лише Ð´Ð»Ñ Ñамої точки монтуваннÑ.
+.PP
+Ð”Ð»Ñ \fBfuser\fP не буде вÑтановлено відповідноÑÑ‚Ñ– Ð´Ð»Ñ Ð¿Ð¾Ð²'Ñзаних файлів,
+зокрема Ñпільних бібліотек процеÑу, Ñкщо вони зберігаютьÑÑ Ñƒ файловій
+ÑиÑтемі \fBbtrfs\fP(5) через відмінніÑÑ‚ÑŒ у ідентифікаторах приÑтроїв між
+\fBstat\fP(2) Ñ– \fI/proc/<PID>/maps\fP.
+.SH "ТÐКОЖ ПЕРЕГЛЯÐЬТЕ"
+\fBkill\fP(1), \fBkillall\fP(1), \fBstat\fP(2), \fBbtrfs\fP(5), \fBlsof\fP(8),
+\fBmount_namespaces\fP(7), \fBpkill\fP(1), \fBps\fP(1), \fBkill\fP(2).
diff --git a/man-po/uk/killall.1 b/man-po/uk/killall.1
new file mode 100644
index 0000000..3cdf171
--- /dev/null
+++ b/man-po/uk/killall.1
@@ -0,0 +1,132 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2023 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH KILLALL 1 "17 Ñ‡ÐµÑ€Ð²Ð½Ñ 2023 року" psmisc "Команди кориÑтувача"
+.SH ÐÐЗВÐ
+killall — програма Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ процеÑів за назвою
+.SH "КОРОТКИЙ ОПИС"
+.ad l
+\fBkillall\fP [\fB\-Z\fP,\fB\ \-\-context\fP \fIвзірець\fP] [\fB\-e\fP,\fB\ \-\-exact\fP] [\fB\-g\fP,\fB\ \-\-process\-group\fP] [\fB\-i\fP,\fB\ \-\-interactive\fP] [\fB\-n\fP,\fB\ \-\-ns\fP \fIPID\fP]
+[\fB\-o\fP,\fB\ \-\-older\-than\fP \fIЧÐС\fP] [\fB\-q\fP,\fB\ \-\-quiet\fP] [\fB\-r\fP,\fB\ \-\-regexp\fP]
+[\fB\-s\fP,\fB\ \-\-signal\fP \fIСИГÐÐЛ\fP,\ \fB\-\fP\fIСИГÐÐЛ\fP] [\fB\-u\fP,\fB\ \-\-user\fP
+\fIкориÑтувач\fP] [\fB\-v\fP,\fB\ \-\-verbose\fP] [\fB\-w\fP,\fB\ \-\-wait\fP] [\fB\-y\fP,\fB\ \-\-younger\-than\fP \fIЧÐС\fP] [\fB\-I\fP,\fB\ \-\-ignore\-case\fP] [\fB\-V\fP,\fB\ \-\-version\fP]
+[\fB\-\-\fP] \fIname\fP ...
+.br
+\fBkillall\fP \fB\-l\fP, \fB\-\-list\fP
+.br
+\fBkillall\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH ОПИС
+\fBkillall\fP надÑилає Ñигнал уÑім процеÑам, Ñкі відповідають будь\-Ñкій з
+вказаних команд. Якщо не вказано назву Ñигналу, процеÑам буде надіÑлано
+Ñигнал SIGTERM.
+.PP
+Сигнали можна вказувати або за назвою (наприклад \fB\-HUP\fP чи \fB\-SIGHUP\fP), або
+за номером (наприклад \fB\-1\fP), або за допомогою параметра \fB\-s\fP.
+.PP
+Якщо назва команди не Ñ” формальним виразом (параметр \fB\-r\fP) Ñ– міÑтить похилу
+риÑку (\fB/\fP), Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ буде вибрано процеÑи, Ñкі виконують
+вказаний файл, незалежно від назви цих процеÑів.
+.PP
+\fBkillall\fP повертає нульовий код, Ñкщо було завершено роботу принаймні
+одного процеÑу Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— з команд зі ÑпиÑку або у ÑпиÑку не було команд, а
+критеріÑм пошуку за \fB\-u\fP Ñ– \fB\-Z\fP відповідав принаймні один процеÑ. У інших
+випадках \fBkillall\fP повертає ненульове значеннÑ.
+.PP
+ÐŸÑ€Ð¾Ñ†ÐµÑ \fBkillall\fP ніколи не завершує Ñвою роботу (але може завершити роботу
+інших процеÑів \fBkillall\fP).
+.SH ПÐРÐМЕТРИ
+.IP "\fB\-e\fP, \fB\-\-exact\fP"
+Вимагати точної відповідноÑÑ‚Ñ– Ð´Ð»Ñ Ð´ÑƒÐ¶Ðµ довгих назв. Якщо довжина назви
+команди перевищує 15 Ñимволів, повна назва може бути недоÑтупною (тобто Ñ—Ñ—
+буде обрізано). У цьому випадку \fBkillall\fP завершить роботу уÑÑ–Ñ… процеÑів,
+Ñкі відповідають першим 15 Ñимволам. Якщо вказано параметр \fB\-e\fP, такі
+запиÑи буде пропущено. \fBkillall\fP виведе Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾
+пропущеного запиÑу, Ñкщо окрім \fB\-e\fP вказано \fB\-v\fP.
+.IP "\fB\-I\fP, \fB\-\-ignore\-case\fP"
+Ð’Ñтановлювати відповідніÑÑ‚ÑŒ процеÑÑ– без Ð²Ñ€Ð°Ñ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру Ñимволів.
+.IP "\fB\-g\fP, \fB\-\-process\-group\fP"
+Завершити уÑÑ– процеÑи у групі, до Ñкої належить знайдений процеÑ. Сигнал
+Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ буде надіÑлано один раз Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— з груп, навіть Ñкщо
+буде виÑвлено декілька процеÑів, Ñкі належать до однієї групи.
+.IP "\fB\-i\fP, \fB\-\-interactive\fP"
+ÐадÑилати перед припиненнÑм роботи запит в інтерактивному режимі.
+.IP "\fB\-l\fP, \fB\-\-list\fP"
+ВивеÑти ÑпиÑок уÑÑ–Ñ… відомих назв Ñигналів.
+.IP "\fB\-n\fP, \fB\-\-ns\fP"
+Шукати у проÑторі назв PID вказаного PID. Типовою поведінкою Ñ” пошуку в уÑÑ–Ñ…
+проÑторах назв.
+.IP "\fB\-o\fP, \fB\-\-older\-than\fP"
+ОброблÑти лише процеÑи, Ñкі Ñ” Ñтарішими вказаного моменту чаÑу (тобто Ñ‚Ñ–
+процеÑи, Ñкі запущено до вказаного моменту чаÑу). Ð§Ð°Ñ Ð¼Ð°Ñ” бути вказано у
+форматі дійÑного чиÑла з рухомою крапкою із визначеннÑм одиниці
+виміру. ОдиницÑми Ñ” s, m, h, d, w, M, y, тобто Ñекунди, хвилини, години,
+дні, тижні, міÑÑці та роки, відповідно.
+.IP "\fB\-q\fP, \fB\-\-quiet\fP"
+Ðе ÑкаржитиÑÑ, Ñкщо не завершено роботу жодного процеÑу.
+.IP "\fB\-r\fP, \fB\-\-regexp\fP"
+Вважати взірець назви процеÑу розширеним формальним виразом POSIX,
+відповідно до ÑинтакÑиÑу \fBregex\fP(3).
+.IP "\fB\-s\fP, \fB\-\-signal\fP, \fB\-\fP\fIСИГÐÐЛ\fP"
+ÐадіÑлати вказаний Ñигнал, заміÑÑ‚ÑŒ SIGTERM.
+.IP "\fB\-u\fP, \fB\-\-user\fP"
+Завершити роботу уÑÑ–Ñ… процеÑів, влаÑником Ñких Ñ” вказаний кориÑтувач. Ðазви
+команд при цьому Ñ” необов'Ñзковими.
+.IP "\fB\-v\fP, \fB\-\-verbose\fP"
+ÐадіÑлати звіт щодо того, чи було надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñигналу уÑпішним.
+.IP "\fB\-V\fP, \fB\-\-version\fP"
+Показати інформацію щодо верÑÑ–Ñ—.
+.IP "\fB\-w\fP, \fB\-\-wait\fP"
+Зачекати на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ уÑÑ–Ñ… процеÑів. \fBkillall\fP раз на Ñекунду
+перевірÑÑ”, чи працює ÑкийÑÑŒ із процеÑів, роботу Ñких має бути завершено, Ñ–
+повертає керуваннÑ, лише коли у ÑпиÑку не лишитьÑÑ Ð¶Ð¾Ð´Ð½Ð¾Ð³Ð¾
+процеÑу. Зауважте, що \fBkillall\fP може чекати дуже довго, Ñкщо Ñигнал було
+проігноровано, він не Ñпрацював, або Ñкщо Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÑƒÑ” працювати у Ñтані
+зомбі.
+.IP "\fB\-y\fP, \fB\-\-younger\-than\fP"
+ОброблÑти лише процеÑи, Ñкі Ñ” новішими вказаного моменту чаÑу (тобто Ñ‚Ñ–
+процеÑи, Ñкі запущено піÑÐ»Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ð³Ð¾ моменту чаÑу). Ð§Ð°Ñ Ð¼Ð°Ñ” бути вказано у
+форматі дійÑного чиÑла з рухомою крапкою із визначеннÑм одиниці
+виміру. ОдиницÑми Ñ” s, m, h, d, w, M, y, тобто Ñекунди, хвилини, години,
+дні, тижні, міÑÑці та роки, відповідно.
+.IP "\fB\-Z\fP, \fB\-\-context\fP"
+Визначити контекÑÑ‚ безпеки: завершити роботу лише процеÑів, Ñкі мають
+контекÑÑ‚ безпеки, Ñкий визначаєтьÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ð¼ формальним
+виразом\-взірцем. Цей параметр має передувати іншим параметрам у командному
+Ñ€Ñдку. Ðазви команд Ñ” необов'Ñзковими.
+.SH ФÐЙЛИ
+.TP
+/proc
+Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми процеÑів
+.SH "ВІДОМІ Ð’ÐДИ"
+Ð—Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ за файлом працює лише Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… файлів, Ñкі
+підтримують відкритіÑÑ‚ÑŒ файлів під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ. Інакше кажучи, роботу
+нечиÑтих виконуваних файлів не можна завершити у цей ÑпоÑіб.
+.PP
+Зауважте, що команда \fBkillall\fP \fIназва\fP може не Ñпрацювати у бажаний ÑпоÑіб
+у ÑиÑтемах, відмінних від Linux, оÑобливо, Ñкщо Ñ—Ñ— запущено від імені
+привілейованого кориÑтувача.
+.PP
+\fBkillall \-w\fP не визначає, чи зник Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ– чи не замінено його новим
+процеÑом Ñ– тим Ñамим PID між ÑеанÑами ÑкануваннÑ.
+.PP
+Якщо процеÑи змінюють назву, \fBkillall\fP не зможе належним чином вÑтановити
+їхню відповідніÑÑ‚ÑŒ.
+.PP
+У \fBkillall\fP передбачено Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ назв, Ñкі може бути вказано у
+Ñ€Ñдку команди. Розмір визначаєтьÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ð¾Ð¼ «довгого» цілого чиÑла без
+знаку, помноженим на 8. Ð”Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆÐ¾ÑÑ‚Ñ– 32\-бітових ÑиÑтем розмір обмежено 32
+Ñимволами, а Ð´Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆÐ¾ÑÑ‚Ñ– 64\-бітових — 64 Ñимволами.
+.SH "ТÐКОЖ ПЕРЕГЛЯÐЬТЕ"
+\fBkill\fP(1), \fBfuser\fP(1), \fBpgrep\fP(1), \fBpidof\fP(1), \fBpkill\fP(1), \fBps\fP(1),
+\fBkill\fP(2), \fBregex\fP(3).
diff --git a/man-po/uk/peekfd.1 b/man-po/uk/peekfd.1
new file mode 100644
index 0000000..ce1e7e0
--- /dev/null
+++ b/man-po/uk/peekfd.1
@@ -0,0 +1,62 @@
+.\"
+.\" Copyright 2007 Trent Waddington <trent.waddington@gmail.com>
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PEEKFD 1 "1 Ð³Ñ€ÑƒÐ´Ð½Ñ 2021 року" psmisc "Команди кориÑтувача"
+.SH ÐÐЗВÐ
+peekfd — програма Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´ÐµÑкрипторів файлів Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð¸Ñ… процеÑів
+.SH "КОРОТКИЙ ОПИС"
+\fBpeekfd\fP [\fB\-8\fP,\fB\-\-eight\-bit\-clean\fP] [\fB\-n\fP,\fB\-\-no\-headers\fP]
+[\fB\-f\fP,\fB\-\-follow\fP] [\fB\-d\fP,\fB\-\-duplicates\-removed\fP] [\fB\-V\fP,\fB\-\-version\fP]
+[\fB\-h\fP,\fB\-\-help\fP] \fIpid\fP [\fIfd\fP] [\fIfd\fP] ...
+.SH ОПИС
+\fBpeekfd\fP приєднуєтьÑÑ Ð´Ð¾ запущеного процеÑу Ñ– перехоплює уÑÑ– команди
+Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ‚Ð° запиÑу деÑкрипторів файлів. Ви можете вказати бажані номери
+деÑкрипторів файлів або Ñтворити дамп уÑÑ–Ñ… команд Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ‚Ð° запиÑу.
+.SH ПÐРÐМЕТРИ
+.IP \-8
+Ðе оброблÑти дані щодо прочитаних або запиÑаних байтів піÑÐ»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ.
+.IP \-n
+Ðе показувати заголовки, Ñкі вказують на джерело дампу байтів.
+.IP \-c
+Також Ñтворити дамп дій із вказаним деÑкриптором файла у будь\-Ñкому новому
+дочірньому процеÑÑ–.
+.IP \-d
+Вилучити дублікати запиÑів щодо Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ запиÑу із виведених даних. Якщо
+ви переглÑдаєте дані у терміналі з повтореннÑм виведеннÑ, ймовірно, цей
+параметр буде кориÑним.
+.IP \-v
+ВивеÑти Ñ€Ñдок верÑÑ–Ñ—.
+.IP \-h
+ВивеÑти довідкове повідомленнÑ.
+.SH ФÐЙЛИ
+\fB/proc/\fP\fI*\fP\fB/fd\fP
+.RS
+Ðе викориÑтовуєтьÑÑ, але Ñ” кориÑним Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів, Ñкі хочуть отримати
+придатні до обробки номери деÑкрипторів файлів.
+.SH СЕРЕДОВИЩЕ
+Ðічого.
+.SH ДІÐГÐОСТИКÐ
+До stderr може бути ÑпрÑмовано такі діагноÑтичні дані:
+.TP
+\fBПомилка під Ñ‡Ð°Ñ Ð´Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ pid \fP\fI<PID>\fP
+СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñпроби приєднатиÑÑ Ð´Ð¾ процеÑу. Ймовірно, вам
+потрібні права доÑтупу кориÑтувача root.
+.SH Ð’ÐДИ
+Ймовірно, вад дуже багато. Ðічого дивного не ÑтанетьÑÑ, Ñкщо процеÑ, за Ñким
+ви ведете ÑпоÑтереженнÑ, неÑподівано завершить роботу.
+.SH ÐВТОР
+.MT trent.waddington@gmail.com
+Trent Waddington
+.ME
+.SH "ТÐКОЖ ПЕРЕГЛЯÐЬТЕ"
+\fBttysnoop\fP(8)
diff --git a/man-po/uk/prtstat.1 b/man-po/uk/prtstat.1
new file mode 100644
index 0000000..283c5b6
--- /dev/null
+++ b/man-po/uk/prtstat.1
@@ -0,0 +1,36 @@
+.\"
+.\" Copyright 2009-2020 Craig Small
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PRTSTAT 1 "9 вереÑÐ½Ñ 2020 року" psmisc "Команди кориÑтувача"
+.SH ÐÐЗВÐ
+prtstat — програма Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ ÑтатиÑтичних даних щодо вказаного процеÑу
+.SH "КОРОТКИЙ ОПИС"
+.ad l
+\fBprtstat\fP [\fB\-r\fP|\fB\-\-raw\fP] \fIpid\fP
+.br
+\fBprtstat\fP \fB\-V\fP|\fB\-\-version\fP
+.ad b
+.SH ОПИС
+\fBprtstat\fP виводить ÑтатиÑтичні дані щодо вказаного процеÑу. Програма
+викориÑтовує дані з файла \fB/proc/\fP\fIpid\fP\fB/stat\fP.
+.SH ПÐРÐМЕТРИ
+.TP
+\fB\-r\fP,\fB\ \-\-raw\fP
+ВивеÑти дані у необробленому форматі.
+.TP
+\fB\-V\fP,\fB\ \-\-version\fP
+ВивеÑти відомоÑÑ‚Ñ– щодо верÑÑ–Ñ— \fBprtstat\fP.
+.SH ФÐЙЛИ
+.TP
+\fB/proc/\fP\fIpid\fP\fB/stat\fP
+джерело відомоÑтей, Ñке викориÑтовує \fBprtstat\fP.
diff --git a/man-po/uk/pslog.1 b/man-po/uk/pslog.1
new file mode 100644
index 0000000..c2218a9
--- /dev/null
+++ b/man-po/uk/pslog.1
@@ -0,0 +1,39 @@
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
+.\" them to pre-process this man page with tbl)
+.\" Man page for pwdx
+.\" Licensed under version 2 of the GNU General Public License.
+.\" Copyright 2015 Vito Mule’.
+.\" Based on the pwdx(1) man page by Nicholas Miell.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSLOG 1 "9 вереÑÐ½Ñ 2020 року" Linux "Підручник кориÑтувача Linux"
+.SH ÐÐЗВÐ
+pslog — програма Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑˆÐ»Ñху до файла журналу вказаного процеÑу
+.SH "КОРОТКИЙ ОПИС"
+.ad l
+\fBpslog\fP \fIpid\fP \&..."
+.br
+\fBpslog \-V\fP
+.ad b
+.SH ОПИС
+Програма \fBpslog\fP визначає поточний файл журналу Ð´Ð»Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ð³Ð¾ процеÑу.
+.SH ПÐРÐМЕТРИ
+.TP
+\fB\-V\fP
+Показати інформацію щодо верÑÑ–Ñ—.
+.SH "ТÐКОЖ ПЕРЕГЛЯÐЬТЕ"
+\fBpgrep\fP(1), \fBps\fP(1), \fBpwdx\fP(1).
+.SH ÐВТОР
+Vito Mule\(cq€™
+.MT mulevito@gmail.com
+.ME
+напиÑав \fBpslog\fP у 2015
+році. Будь лаÑка, надÑилайте Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ вади на адреÑу
+.MT mulevito@gmail.com
+.ME .
+
diff --git a/man-po/uk/pstree.1 b/man-po/uk/pstree.1
new file mode 100644
index 0000000..0014c0e
--- /dev/null
+++ b/man-po/uk/pstree.1
@@ -0,0 +1,141 @@
+.\"
+.\" Copyright 1993-2002 Werner Almesberger
+.\" 2002-2021 Craig Small
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PSTREE 1 "21 Ñ‡ÐµÑ€Ð²Ð½Ñ 2021 року" psmisc "Команди кориÑтувача"
+.SH ÐÐЗВÐ
+pstree — програма Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ ієрархії процеÑів
+.SH "КОРОТКИЙ ОПИС"
+.ad l
+\fBpstree\fP [\fB\-a\fP,\fB\ \-\-arguments\fP] [\fB\-c\fP,\fB\ \-\-compact\-not\fP] [\fB\-C\fP,\fB\ \-\-color\ \fP\fIатрибут\fP] [\fB\-g\fP,\fB\ \-\-show\-pgids\fP] [\fB\-h\fP,\fB\ \-\-highlight\-all\fP,\fB\ \-H\fP\fI\ pid\fP,\fB\ \-\-highlight\-pid\ \fP\fIpid\fP] [\fB\-l\fP,\fB\ \-\-long\fP] [\fB\-n\fP,\fB\ \-\-numeric\-sort\fP] [\fB\-N\fP,\fB\ \-\-ns\-sort\ \fP\fIчу\fP]
+[\fB\-p\fP,\fB\ \-\-show\-pids\fP] [\fB\-s\fP,\fB\ \-\-show\-parents\fP] [\fB\-S\fP,\fB\ \-\-ns\-changes\fP] [\fB\-t\fP,\fB\ \-\-thread\-names\fP] [\fB\-T\fP,\fB\ \-\-hide\-threads\fP]
+[\fB\-u\fP,\fB\ \-\-uid\-changes\fP] [\fB\-Z\fP,\fB\ \-\-security\-context\fP] [\fB\-A\fP,\fB\ \-\-ascii\fP,\fB\ \-G\fP,\fB\ \-\-vt100\fP,\fB\ \-U\fP,\fB\ \-\-unicode\fP] [\fIpid\fP,\fB\ \fP\fIкориÑтувач\fP]
+.br
+\fBpstree\fP \fB\-V\fP,\fB\ \-\-version\fP
+.ad b
+.SH ОПИС
+\fBpstree\fP показує ієрархію запущених процеÑів. Коренем дерева вважатиметьÑÑ
+\fIpid\fP або \fBinit\fP, Ñкщо \fIpid\fP не вказано. Якщо вказано ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача,
+уÑÑ– ієрархії процеÑів матимуть корінь у процеÑах, влаÑником Ñких Ñ” вказаний
+кориÑтувач.
+.PP
+\fBpstree\fP візуально об'єднує ідентичні гілки, беручи їхні запиÑи у квадратні
+дужки і додаючи лічильник повторень. Приклад:
+.nf
+.sp
+ init\-+\-getty
+ |\-getty
+ |\-getty
+ `\-getty
+.sp
+.fi
+перетворюєтьÑÑ Ð½Ð°
+.nf
+.sp
+ init\-\-\-4*[getty]
+.sp
+.fi
+.PP
+.PP
+Дочірні гілки процеÑу буде показано під батьківÑьким процеÑом із назвою
+процеÑу у фігурних дужках. Приклад:
+.nf
+.sp
+ icecast2\-\-\-13*[{icecast2}]
+.sp
+.fi
+.PP
+Якщо \fBpstree\fP викликано Ñк \fBpstree.x11\fP, програма наприкінці Ñ€Ñдка надішле
+кориÑтувачеві запит щодо натиÑÐºÐ°Ð½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÑ– Enter Ñ– не поверне керуваннÑ,
+доки цього не ÑтанетьÑÑ. Такий варіант роботи Ñ” кориÑним, Ñкщо \fBpstree\fP
+запущено у графічному терміналі.
+.PP
+ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿ÐµÐ²Ð½Ð¸Ñ… Ñдер та параметрів монтуваннÑ, зокрема параметра
+\fIhidepid\fP Ð´Ð»Ñ procfs, може призвеÑти до Ð¿Ñ€Ð¸Ñ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо деÑких
+процеÑів. У таких випадках \fBpstree\fP намагатиметьÑÑ Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ ієрархію без
+цих даних, показуючи назви процеÑів за допомогою Ñимволів знаку питаннÑ.
+
+.SH ПÐРÐМЕТРИ
+.IP \fB\-a\fP
+Показувати аргументи Ñ€Ñдка команди. Якщо Ñ€Ñдок команди процеÑу вивантажено,
+запиÑу процеÑу буде показано у дужках. \fB\-a\fP неÑвним чином вимикає
+ÑƒÑ‰Ñ–Ð»ÑŒÐ½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑів, але не Ð´Ð»Ñ Ð³Ñ–Ð»Ð¾Ðº.
+.IP \fB\-A\fP
+ВикориÑтовувати Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ–Ñ”Ñ€Ð°Ñ€Ñ…Ñ–Ñ— Ñимволи ASCII.
+.IP \fB\-c\fP
+Вимкнути ÑƒÑ‰Ñ–Ð»ÑŒÐ½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… гілок ієрархії. Типово, програма ущільнює
+гілки, Ñкщо це можливо.
+.IP \fB\-C\fP
+Розфарбувати назви процеÑів за заданими атрибутами. У поточній верÑÑ–Ñ—
+\fBpstree\fP передбачено підтримку лише Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ \fBage\fP, викориÑÑ‚Ð°Ð½Ð½Ñ Ñкого
+розфарбовує процеÑи за віком. ПроцеÑи, Ñкі Ñ” новішими за 60 Ñекунд, буде
+показано зеленим, новіші за годину — жовтим, а решту — червоним кольором.
+.IP \fB\-g\fP
+Показувати PGID. Ідентифікатори груп процеÑів (PGID) буде показано у форматі
+деÑÑткових чиÑел у дужках піÑÐ»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— назви процеÑу. Якщо має бути показано
+одночаÑно PID та PGID, PID буде показано першими.
+.IP \fB\-G\fP
+ВикориÑтовувати Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ Ñимволи VT100.
+.IP \fB\-h\fP
+ПідÑвічувати поточний Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ– його Ñпадкоємців. Ðе працює, Ñкщо у терміналі
+не передбачено підÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ до показаної ієрархії не входить жоден з
+поточний процеÑів та його Ñпадкоємців.
+.IP \fB\-H\fP
+Подібний до \fB\-h\fP, але буде підÑвічено вказаний процеÑ. Ðа відміну від
+команди з параметром \fB\-h\fP, \fBpstree\fP завершує роботу повідомленнÑм щодо
+помилки, Ñкщо викориÑтано \fB\-H\fP, Ñ– підÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ Ñ” недоÑтупним.
+.IP \fB\-l\fP
+Показувати довгі Ñ€Ñдки. Типово, Ñ€Ñдки буде обрізано на Ñимволі, Ñкий
+визначаєтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñм змінної Ñередовища COLUMNS, або на Ñимволі, Ñкий
+визначаєтьÑÑ ÑˆÐ¸Ñ€Ð¸Ð½Ð¾ÑŽ диÑплеÑ. Якщо жодне з цих значень не визначено, Ñ€Ñдки
+буде обрізано на позиції 132.
+.IP \fB\-n\fP
+УпорÑдкувати процеÑи із однаковим батьківÑьким запиÑом за PID, а не за
+назвою. (ЧиÑлове упорÑдковуваннÑ.)
+.IP \fB\-N\fP
+Показувати окремі ієрархії Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ проÑтору назв визначеного типу
+Можливими значеннÑми типу Ñ” такі: \fIipc\fP, \fImnt\fP, \fInet\fP, \fIpid\fP, \fItime\fP,
+\fIuser\fP, \fIuts\fP. Звичайні кориÑтувачі не мають доÑтупу до даних щодо
+процеÑів інших кориÑтувачів, тому виведені дані будуть доволі обмеженими.
+.IP \fB\-p\fP
+Показувати PID. PID буде показано Ñк деÑÑткові чиÑла у дужках піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸
+процеÑу. ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° \fB\-p\fP неÑвним чином вимикає ущільненнÑ.
+.IP \fB\-s\fP
+Показати батьківÑькі процеÑи вказаного процеÑу.
+.IP \fB\-S\fP
+Показати переходи проÑторів назв. Подібний до \fB\-N\fP. Якщо команду віддано
+від імені звичайного кориÑтувача, виведені дані будуть доволі обмеженими.
+.IP \fB\-t\fP
+Показувати повні назви гілок, Ñкщо такі доÑтупні.
+.IP \fB\-T\fP
+Приховати гілки Ñ– показати лише процеÑи.
+.IP \fB\-u\fP
+Показати переходи uid. Якщо uid процеÑу відрізнÑєтьÑÑ Ð²Ñ–Ð´ uid батьківÑького
+процеÑу, новий uid буде показано у дужках піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ процеÑу.
+.IP \fB\-U\fP
+ВикориÑтовувати Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ Ñимволи UTF\-8 (Unicode). У Linux 1.1\-54
+Ñ– новіших верÑÑ–ÑÑ… увійти до режиму UTF\-8 у конÑолі можна за допомогою
+команди \fBecho \-e '\033%8'\fP, а вийти — за допомогою команди \fBecho \-e \&'\033%@'\fP.
+.IP \fB\-V\fP
+Показати інформацію щодо верÑÑ–Ñ—.
+.IP \fB\-Z\fP
+Показувати поточні атрибути захиÑту процеÑу. Ð”Ð»Ñ ÑиÑтем SELinux це буде
+контекÑÑ‚ безпеки.
+.SH ФÐЙЛИ
+.TP
+/proc
+Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми процеÑів
+.SH Ð’ÐДИ
+ДеÑкі набори Ñимволів можуть бути неÑуміÑні із набором Ñимволів VT100.
+.SH "ТÐКОЖ ПЕРЕГЛЯÐЬТЕ"
+\fBps\fP(1), \fBtop\fP(1), \fBproc\fP(5).
+.\"{{{}}}
diff --git a/misc/git-version-gen b/misc/git-version-gen
new file mode 100755
index 0000000..171767f
--- /dev/null
+++ b/misc/git-version-gen
@@ -0,0 +1,181 @@
+#!/bin/sh
+# Print a version string.
+scriptversion=2011-02-19.19; # UTC
+
+# Copyright (C) 2007-2011 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/.
+# It may be run two ways:
+# - from a git repository in which the "git describe" command below
+# produces useful output (thus requiring at least one signed tag)
+# - from a non-git-repo directory containing a .tarball-version file, which
+# presumes this script is invoked like "./git-version-gen .tarball-version".
+
+# In order to use intra-version strings in your project, you will need two
+# separate generated version string files:
+#
+# .tarball-version - present only in a distribution tarball, and not in
+# a checked-out repository. Created with contents that were learned at
+# the last time autoconf was run, and used by git-version-gen. Must not
+# be present in either $(srcdir) or $(builddir) for git-version-gen to
+# give accurate answers during normal development with a checked out tree,
+# but must be present in a tarball when there is no version control system.
+# Therefore, it cannot be used in any dependencies. GNUmakefile has
+# hooks to force a reconfigure at distribution time to get the value
+# correct, without penalizing normal development with extra reconfigures.
+#
+# .version - present in a checked-out repository and in a distribution
+# tarball. Usable in dependencies, particularly for files that don't
+# want to depend on config.h but do want to track version changes.
+# Delete this file prior to any autoconf run where you want to rebuild
+# files to pick up a version string change; and leave it stale to
+# minimize rebuild time after unrelated changes to configure sources.
+#
+# It is probably wise to add these two files to .gitignore, so that you
+# don't accidentally commit either generated file.
+#
+# Use the following line in your configure.ac, so that $(VERSION) will
+# automatically be up-to-date each time configure is run (and note that
+# since configure.ac no longer includes a version string, Makefile rules
+# should not depend on configure.ac for version updates).
+#
+# AC_INIT([GNU project],
+# m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+# [bug-project@example])
+#
+# Then use the following lines in your Makefile.am, so that .version
+# will be present for dependencies, and so that .tarball-version will
+# exist in distribution tarballs.
+#
+# BUILT_SOURCES = $(top_srcdir)/.version
+# $(top_srcdir)/.version:
+# echo $(VERSION) > $@-t && mv $@-t $@
+# dist-hook:
+# echo $(VERSION) > $(distdir)/.tarball-version
+
+case $# in
+ 1|2) ;;
+ *) echo 1>&2 "Usage: $0 \$srcdir/.tarball-version" \
+ '[TAG-NORMALIZATION-SED-SCRIPT]'
+ exit 1;;
+esac
+
+tarball_version_file=$1
+tag_sed_script="${2:-s/x/x/}"
+nl='
+'
+
+# Avoid meddling by environment variable of the same name.
+v=
+v_from_git=
+
+# First see if there is a tarball-only version file.
+# then try "git describe", then default.
+if test -f $tarball_version_file
+then
+ v=`cat $tarball_version_file` || v=
+ case $v in
+ *$nl*) v= ;; # reject multi-line output
+ [0-9]*) ;;
+ *) v= ;;
+ esac
+ test -z "$v" \
+ && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2
+fi
+
+if test -n "$v"
+then
+ : # use $v
+# Otherwise, if there is at least one git commit involving the working
+# directory, and "git describe" output looks sensible, use that to
+# derive a version string.
+elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
+ && v=`git describe --abbrev=4 --match='v*' HEAD 2>/dev/null \
+ || git describe --abbrev=4 HEAD 2>/dev/null` \
+ && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
+ && case $v in
+ v[0-9]*) ;;
+ *) (exit 1) ;;
+ esac
+then
+ # Is this a new git that lists number of commits since the last
+ # tag or the previous older version that did not?
+ # Newer: v6.10-77-g0f8faeb
+ # Older: v6.10-g0f8faeb
+ case $v in
+ *-rc[0-9]) ;; # release candidate
+ *-*-*) : git describe is okay three part flavor ;;
+ *-*)
+ : git describe is older two part flavor
+ # Recreate the number of commits and rewrite such that the
+ # result is the same as if we were using the newer version
+ # of git describe.
+ vtag=`echo "$v" | sed 's/-.*//'`
+ commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
+ || { commit_list=failed;
+ echo "$0: WARNING: git rev-list failed" 1>&2; }
+ numcommits=`echo "$commit_list" | wc -l`
+ v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
+ test "$commit_list" = failed && v=UNKNOWN
+ ;;
+ esac
+
+ case $v in
+ *-rc[0-9])
+ # Remove the "g" in git describe's output string, to save a byte.
+ v=`echo "$v" | sed 's/\(.*\)-g/\1-/'`;
+ ;;
+ *)
+ # Change the first '-' to a '.', so version-comparing tools work properly.
+ # Remove the "g" in git describe's output string, to save a byte.
+ v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`;
+ ;;
+ esac
+ v_from_git=1
+else
+ v=UNKNOWN
+fi
+
+v=`echo "$v" |sed 's/^v//'`
+
+# Test whether to append the "-dirty" suffix only if the version
+# string we're using came from git. I.e., skip the test if it's "UNKNOWN"
+# or if it came from .tarball-version.
+if test -n "$v_from_git"; then
+ # Don't declare a version "dirty" merely because a time stamp has changed.
+ git update-index --refresh > /dev/null 2>&1
+
+ dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
+ case "$dirty" in
+ '') ;;
+ *) # Append the suffix only if there isn't one already.
+ case $v in
+ *-dirty) ;;
+ *) v="$v-dirty" ;;
+ esac ;;
+ esac
+fi
+
+# Omit the trailing newline, so that m4_esyscmd can use the result directly.
+echo "$v" | tr -d "$nl"
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/missing b/missing
new file mode 100755
index 0000000..1fe1611
--- /dev/null
+++ b/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'autom4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644
index 0000000..b8e8835
--- /dev/null
+++ b/po/ChangeLog
@@ -0,0 +1,67 @@
+2024-01-13 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.21.
+ * Rules-quot: Upgrade to gettext-0.21.
+ * en@boldquot.header: Upgrade to gettext-0.21.
+ * en@quot.header: Upgrade to gettext-0.21.
+ * insert-header.sin: Upgrade to gettext-0.21.
+ * remove-potcdate.sin: Upgrade to gettext-0.21.
+
+2015-06-30 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.19.4.
+ * Rules-quot: Upgrade to gettext-0.19.4.
+
+2007-03-02 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.16.1.
+
+2004-04-30 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: New file, from gettext-0.14.1.
+ * Makevars: New file, from gettext-0.14.1.
+ * Rules-quot: New file, from gettext-0.14.1.
+ * boldquot.sed: New file, from gettext-0.14.1.
+ * en@boldquot.header: New file, from gettext-0.14.1.
+ * en@quot.header: New file, from gettext-0.14.1.
+ * insert-header.sin: New file, from gettext-0.14.1.
+ * quot.sed: New file, from gettext-0.14.1.
+ * remove-potcdate.sin: New file, from gettext-0.14.1.
+
+2004-04-05 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.14.1.
+ * Makevars: Upgrade to gettext-0.14.1.
+ * Rules-quot: Upgrade to gettext-0.14.1.
+
+2003-11-28 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.12.1.
+
+2002-08-16 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: New file, from gettext-0.11.5.
+ * Rules-quot: New file, from gettext-0.11.5.
+ * boldquot.sed: New file, from gettext-0.11.5.
+ * en@boldquot.header: New file, from gettext-0.11.5.
+ * en@quot.header: New file, from gettext-0.11.5.
+ * insert-header.sin: New file, from gettext-0.11.5.
+ * quot.sed: New file, from gettext-0.11.5.
+ * remove-potcdate.sin: New file, from gettext-0.11.5.
+
+2001-06-13 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.36.
+
+2001-06-13 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.36.
+
+2001-06-13 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.36.
+
+2001-06-13 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.36.
+
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..57c058f
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,2 @@
+# Enabled languages
+bg ca cs da de el eo es eu fi fr hr hu id it ja ka ko nb nl pl pt_BR pt ro ru sr sv uk vi zh_CN zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..6b25f0d
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,510 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-2000 Ulrich Drepper <drepper@gnu.ai.mit.edu>
+# Copyright (C) 2000-2020 Free Software Foundation, Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without any warranty.
+#
+# Origin: gettext-0.21
+GETTEXT_MACRO_VERSION = 0.20
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SED = @SED@
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+# When building gettext-tools, we prefer to use the built programs
+# rather than installed programs. However, we can't do that when we
+# are cross compiling.
+CROSS_COMPILING = @CROSS_COMPILING@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = @MSGMERGE@
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+all: all-@USE_NLS@
+
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update
+
+# The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs.
+# The GNU Coding Standards say in
+# <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>:
+# "GNU distributions usually contain some files which are not source files
+# ... . Since these files normally appear in the source directory, they
+# should always appear in the source directory, not in the build directory.
+# So Makefile rules to update them should put the updated files in the
+# source directory."
+# Therefore we put these files in the source directory, not the build directory.
+
+# During .po -> .gmo conversion, take into account the most recent changes to
+# the .pot file. This eliminates the need to update the .po files when the
+# .pot file has changed, which would be troublesome if the .po files are put
+# under version control.
+$(GMOFILES): $(srcdir)/$(DOMAIN).pot
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \
+ cd $(srcdir) && \
+ rm -f $${lang}.gmo && \
+ $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \
+ $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \
+ mv t-$${lang}.gmo $${lang}.gmo && \
+ rm -f $${lang}.1po
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all-yes: $(srcdir)/stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+CHECK_MACRO_VERSION = \
+ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target).
+
+# $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS
+# have been loosely updated. Its purpose is that when a developer or translator
+# checks out the package from a version control system, and the $(DOMAIN).pot
+# file is not under version control, "make" will update the $(DOMAIN).pot and
+# the $(CATALOGS), but subsequent invocations of "make" will do nothing. This
+# timestamp would not be necessary if updating the $(CATALOGS) would always
+# touch them; however, the rule for $(POFILES) has been designed to not touch
+# files that don't need to be changed.
+$(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot
+ @$(CHECK_MACRO_VERSION)
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch $(srcdir)/stamp-po" && \
+ echo timestamp > $(srcdir)/stamp-poT && \
+ mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ package_gnu="$(PACKAGE_GNU)"; \
+ test -n "$$package_gnu" || { \
+ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \
+ else \
+ LC_ALL=C grep -i 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+ fi; \
+ } | grep -v 'libtool:' >/dev/null; then \
+ package_gnu=yes; \
+ else \
+ package_gnu=no; \
+ fi; \
+ }; \
+ if test "$$package_gnu" = "yes"; then \
+ package_prefix='GNU '; \
+ else \
+ package_prefix=''; \
+ fi; \
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ ;; \
+ *) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --package-name="$${package_prefix}@PACKAGE@" \
+ --package-version='@VERSION@' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ ;; \
+ esac
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot-header; then \
+ sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
+ cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \
+ rm -f $(DOMAIN).1po \
+ || exit 1; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(POFILESDEPS)
+ @test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) \
+ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+ 0.1[6-7] | 0.1[6-7].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \
+ esac; \
+ }; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+install-dvi install-ps install-pdf install-html:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f $(srcdir)/stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: $(srcdir)/stamp-po $(DISTFILES)
+ @dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ else \
+ case $(XGETTEXT) in \
+ :) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \
+ *) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \
+ esac; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ 0.1[6-7] | 0.1[6-7].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ esac; \
+ }; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..23f15ac
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,78 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This tells whether or not to prepend "GNU " prefix to the package
+# name that gets inserted into the header of the $(DOMAIN).pot file.
+# Possible values are "yes", "no", or empty. If it is empty, try to
+# detect it automatically by scanning the files in $(top_srcdir) for
+# "GNU packagename" string.
+PACKAGE_GNU = no
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = csmall@dropbear.xyz
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context. Possible values are "yes" and "no". Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+# --previous to keep previous msgids of translated messages,
+# --quiet to reduce the verbosity.
+MSGMERGE_OPTIONS =
+
+# These options get passed to msginit.
+# If you want to disable line wrapping when writing PO files, add
+# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
+# MSGINIT_OPTIONS.
+MSGINIT_OPTIONS =
+
+# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
+# has changed. Possible values are "yes" and "no". Set this to no if
+# the POT file is checked in the repository and the version control
+# program ignores timestamps.
+PO_DEPENDS_ON_POT = yes
+
+# This tells whether or not to forcibly update $(DOMAIN).pot and
+# regenerate PO files on "make dist". Possible values are "yes" and
+# "no". Set this to no if the POT file and PO files are maintained
+# externally.
+DIST_DEPENDS_ON_UPDATE_PO = no
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..4f88f21
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,10 @@
+src/fuser.c
+src/killall.c
+src/peekfd.c
+src/prtstat.c
+src/pslog.c
+src/pstree.c
+src/signals.c
+src/signames.c
+src/socket_test.c
+src/statx.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 0000000..18c024b
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,62 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+#
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
+# This file, Rules-quot, and its auxiliary files (listed under
+# DISTFILES.common.extra1) are free software; the Free Software Foundation
+# gives unlimited permission to use, copy, distribute, and modify them.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ ll=`echo $$lang | sed -e 's/@.*//'`; \
+ LC_ALL=C; export LC_ALL; \
+ cd $(srcdir); \
+ if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
+ | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
+ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
+ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
+ ;; \
+ *) \
+ $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
+ ;; \
+ esac } 2>/dev/null > $$tmpdir/$$lang.new.po \
+ ; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "creation of $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+en@quot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+ rm -f *.insert-header
diff --git a/po/bg.gmo b/po/bg.gmo
new file mode 100644
index 0000000..2e755e4
--- /dev/null
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..4a21016
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,829 @@
+# Message catalog for psmisc
+# Copyright © 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Anton Zinoviev <zinoviev@debian.org>, 2006
+#
+# This file should be sent to translation@iro.umontreal.ca with the
+# following subject line: TP-Robot psmisc-22.2pre1.bg.po
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 22.2pre1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2006-03-07 11:49+0200\n"
+"Last-Translator: Anton Zinoviev <zinoviev@debian.org>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/fuser.c:146
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] "
+#| "NAME...\n"
+#| " [ - ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...\n"
+#| " fuser -l\n"
+#| " fuser -V\n"
+#| "Show which processes use the named files, sockets, or filesystems.\n"
+#| "\n"
+#| " -a display unused files too\n"
+#| " -c mounted FS\n"
+#| " -f silently ignored (for POSIX compatibility)\n"
+#| " -i ask before killing (ignored without -k)\n"
+#| " -k kill processes accessing the named file\n"
+#| " -l list available signal names\n"
+#| " -m show all processes using the named filesystems\n"
+#| " -n SPACE search in this name space (file, udp, or tcp)\n"
+#| " -s silent operation\n"
+#| " -SIGNAL send this signal instead of SIGKILL\n"
+#| " -u display user IDs\n"
+#| " -v verbose output\n"
+#| " -V display version information\n"
+#| " -4 search IPv4 sockets only\n"
+#| " -6 search IPv6 sockets only\n"
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Използване: fuser [ -a | -s | -c ] [ -n ВИДИМЕ ] [ -СИГÐÐЛ ] [ -kimuv ] "
+"ИМЕ...\n"
+" [ - ] [ -n ВИДИМЕ ] [ -СИГÐÐЛ ] [ -kimuv ] ИМЕ...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Показва кои процеÑи използват поÑочените файлове, гнезда или файлови "
+"ÑиÑтеми.\n"
+"\n"
+" -a извежда Ñъщо и неизползваните файлове\n"
+" -c монтирана файлова ÑиÑтема (Ñъщото като -m)\n"
+" -f игнорира Ñе (за ÑъвмеÑтимоÑÑ‚ Ñ POSIX)\n"
+" -i пита преди да убие (без -k Ñе игнорира)\n"
+" -k убива процеÑите, използващи поÑÐ¾Ñ‡ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
+" -l извежда доÑтъпните имена на Ñигнали\n"
+" -m показва вÑички процеÑи, използващи зададената файлова ÑиÑтема\n"
+" -n ВИДИМЕ използва такъв вид имена (може да бъде file, udp или tcp)\n"
+" -s „тих режим“ - не Ñъобщава какво Ñе прави\n"
+" -СИГÐÐЛ изпраща този Ñигнал вмеÑто SIGKILL\n"
+" -u извежда ÑобÑтвениците на процеÑите\n"
+" -v подробен изход\n"
+" -V извежда Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑта на fuser\n"
+" -4 Ñ‚ÑŠÑ€Ñи Ñамо IPv4-гнезда\n"
+" -6 Ñ‚ÑŠÑ€Ñи Ñамо IPv6-гнезда\n"
+" - Ð¾Ñ‚Ð¼ÐµÐ½Ñ Ð²Ñички опции\n"
+"\n"
+"Имената от вид udp/tcp Ñа: [локален_порт][,[отдалечен_хоÑÑ‚][,"
+"[отдалечен_порт]]]\n"
+"\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 1993-2005 Werner Almesberger и Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc Ñе разпроÑтранÑва без ÐБСОЛЮТÐО ÐИКÐКВИ ГÐРÐÐЦИИ.\n"
+"Това е Ñвободен Ñофтуер и вие може да го разпроÑтранÑвате Ñвободно ÑъглаÑно\n"
+"уÑловиÑта на ОÑновната общодоÑтъпна Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð½Ð° ГÐУ.\n"
+"За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно това, погледнете файловете Ñ Ð¸Ð¼Ðµ COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Каталогът /proc не може да Ñе отвори: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Ðе може да Ñе задели памет за ÑъответÑтващ процеÑ: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr ""
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Ðе може да Ñе доÑтигне %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Ðе може да Ñе определи локалниÑÑ‚ порт %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Ðепознат вид Ð°Ð´Ñ€ÐµÑ Ð½Ð° Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñ Ð¿Ð¾Ñ€Ñ‚ %d (unknown local port AF)\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Ðе може да Ñе отвори файлът за протокол „%s“: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr ""
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr ""
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "ОпциÑта за вид име изиÑква аргумент."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Ðеправилен вид имена"
+
+#: src/fuser.c:1309
+#, fuzzy
+#| msgid "You can only use files with mountpoint option"
+msgid "You can only use files with mountpoint options"
+msgstr "При опциÑта за файлова ÑиÑтема може да Ñе поÑочват Ñамо файлове"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Ðе е зададена ÑÐ¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ð° процеÑ"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "опциÑта -a не може да Ñе използва едновременно Ñ -q"
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Ðе може да Ñ‚ÑŠÑ€Ñите Ñамо IPv4-гнезда и в Ñъщото време Ñамо IPv6-гнезда"
+
+#: src/fuser.c:1474
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%*s USER PID ACCESS COMMAND\n"
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr ""
+"\n"
+"%*s ПОТРЕБИТЕЛ Пот№ ДОСТЪП КОМÐÐДÐ\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(неизвеÑÑ‚)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Файлът %s не може да Ñе доÑтигне: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Ðе може да Ñе отвори /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Да Ñе убие ли процеÑÑŠÑ‚ %d? (д/Ð) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "ПроцеÑÑŠÑ‚ %d не може да бъде убит: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Ðе може да Ñе отвори мрежово гнездо.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Ðе може да бъде намерен номерът на уÑтройÑтвото на гнездото.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Да Ñе убие ли %s(%s%d) ? (д/Ð) "
+
+#: src/killall.c:114
+#, fuzzy, c-format
+#| msgid "Kill %s(%s%d) ? (y/N) "
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Да Ñе убие ли %s(%s%d) ? (д/Ð) "
+
+#: src/killall.c:262
+#, fuzzy, c-format
+#| msgid "Cannot get UID from process status\n"
+msgid "killall: Cannot get UID from process status\n"
+msgstr ""
+"Въз оÑнова на ÑÑŠÑтоÑнието на процеÑа не може да Ñе уÑтанови потребителÑÑ‚ "
+"ÑобÑтвеник\n"
+
+#: src/killall.c:368
+#, fuzzy, c-format
+#| msgid "Bad regular expression: %s\n"
+msgid "killall: Bad regular expression: %s\n"
+msgstr "Ðеправилен регулÑрен израз: %s\n"
+
+#: src/killall.c:525
+#, fuzzy, c-format
+#| msgid "skipping partial match %s(%d)\n"
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "пропуÑка Ñе чаÑтичнотото Ñъвпадение %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d) Ñе убива ÑÑŠÑ Ñигнал %d\n"
+
+#: src/killall.c:796
+#, fuzzy, c-format
+#| msgid "%s: no process killed\n"
+msgid "%s: no process found\n"
+msgstr "%s: никой Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ е убит\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Използвване: killall [ОПЦИЯ]... [--] ИМЕ...\n"
+
+#: src/killall.c:839
+#, fuzzy, c-format
+#| msgid ""
+#| " killall -l, --list\n"
+#| " killall -V, --version\n"
+#| "\n"
+#| " -e,--exact require exact match for very long names\n"
+#| " -I,--ignore-case case insensitive process name match\n"
+#| " -g,--process-group kill process group instead of process\n"
+#| " -i,--interactive ask for confirmation before killing\n"
+#| " -l,--list list all known signal names\n"
+#| " -q,--quiet don't print complaints\n"
+#| " -r,--regexp interpret NAME as an extended regular expression\n"
+#| " -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+#| " -u,--user USER kill only process(es) running as USER\n"
+#| " -v,--verbose report if the signal was successfully sent\n"
+#| " -V,--version display version information\n"
+#| " -w,--wait wait for processes to die\n"
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact изиÑква точно Ñъвпадение при много дълги имена\n"
+" -I,--ignore-case нечувÑтвително към малки/големи букви Ñравнение Ñ "
+"името\n"
+" -g,--process-group убива групата на процеÑа вмеÑто ÑÐ°Ð¼Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ\n"
+" -i,--interactive пита за потвърждение преди да убие\n"
+" -l,--list извежда вÑички познати имена на Ñигнали\n"
+" -q,--quiet да не протеÑтира (например ако никой Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ е "
+"убит)\n"
+" -r,--regexp използва ИМЕ като разширен регулÑрен израз\n"
+" -s,--signal СИГÐÐЛ изпраща този Ñигнал вмеÑто SIGTERM\n"
+" -u,--user ПОТРЕБ убива Ñамо процеÑ(и), изпълнÑвани от ПОТРЕБителÑ\n"
+" -v,--verbose Ñъобщава, ако уÑпешно е изпратен Ñигнал\n"
+" -V,--version извежда Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑта\n"
+" -w,--wait чака докато процеÑÑŠÑ‚ умре\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context РЕГИЗР убива Ñамо процеÑ(и) от поÑÐ¾Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑÑ‚ на "
+"ÑигурноÑÑ‚\n"
+" (Ñ‚Ñ€Ñбва да предхожда оÑтаналите аргументи)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr ""
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Ðе може да бъде намерен потребител Ñ Ð¸Ð¼Ðµ %s\n"
+
+#: src/killall.c:1016
+#, fuzzy
+#| msgid "Invalid namespace name"
+msgid "Invalid namespace PID"
+msgstr "Ðеправилен вид имена"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Ðеправилен регулÑрен израз: %s\n"
+
+#: src/killall.c:1057
+#, fuzzy, c-format
+#| msgid "Maximum number of names is %d\n"
+msgid "killall: Maximum number of names is %d\n"
+msgstr "МакÑималниÑÑ‚ брой имена е %d\n"
+
+# МиÑлÑ, че Ñтава Ð²ÑŠÐ¿Ñ€Ð¾Ñ Ð·Ð° /proc (Ðнтон Зиновиев)
+#: src/killall.c:1062
+#, fuzzy, c-format
+#| msgid "%s is empty (not mounted ?)\n"
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "%s е празна (не е монтирана?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr ""
+
+#: src/peekfd.c:191
+#, fuzzy, c-format
+#| msgid "pstree (PSmisc) %s\n"
+msgid "peekfd (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+
+#: src/prtstat.c:65
+#, fuzzy, c-format
+#| msgid "pstree (PSmisc) %s\n"
+msgid "prtstat (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 1993-2005 Werner Almesberger и Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr ""
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr ""
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr ""
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr ""
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr ""
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr ""
+
+#: src/prtstat.c:90
+#, fuzzy
+#| msgid "(unknown)"
+msgid "unknown"
+msgstr "(неизвеÑÑ‚)"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr ""
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr ""
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr ""
+
+#: src/prtstat.c:243
+#, fuzzy, c-format
+#| msgid "Cannot allocate memory for matched proc: %s\n"
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Ðе може да Ñе задели памет за ÑъответÑтващ процеÑ: %s\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr ""
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr ""
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr ""
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+
+# МиÑлÑ, че Ñтава Ð²ÑŠÐ¿Ñ€Ð¾Ñ Ð·Ð° /proc (Ðнтон Зиновиев)
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s е празна (не е монтирана?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+
+#: src/pstree.c:1326
+#, fuzzy, c-format
+#| msgid ""
+#| " PID start at this PID; default is 1 (init)\n"
+#| " USER show only trees rooted at processes of this user\n"
+#| "\n"
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+" ПРОЦЕС започва от този номер на процеÑ; по подразбиране от 1 (init)\n"
+" ПОТРЕБ показва Ñамо поддърветата, оÑновани от този потребител\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "Ðе е зададена ÑтойноÑÑ‚ на TERM\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Ðе може да Ñе определÑÑ‚ възможноÑтите на терминала\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr ""
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "ÐÑма такъв потребител: %s\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+#| msgid "No processes found.\n"
+msgid "Process %d not found.\n"
+msgstr "Ðе е намерен нито един процеÑ.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Ðе е намерен нито един процеÑ.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "ÐатиÑнете Return, за да Ñе завърши\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: непознат Ñигнал; %s -l извежда познатите Ñигнали.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Използване: pidof [ -eg ] ИМЕ...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e изиÑква точно Ñъвпадение при много дълги имена;\n"
+#~ " пропуÑкане, ако командниÑÑ‚ ред не е доÑтъпен\n"
+#~ " -g показва групата на процеÑа вмеÑто ÑобÑтвеника\n"
+#~ " -V извежда Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑта\n"
+#~ "\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Използване: killall [-Z КОÐТЕКСТ] [-u ПОТРЕБ] [ -eIgiqrvw ] [ -СИГÐÐЛ ] "
+#~ "ИМЕ...\n"
+
+#, c-format
+#~ msgid "Cannot stat mount point %s: %s\n"
+#~ msgstr "Ðе може да Ñе доÑтигне мÑÑтото на монтиране %s: %s\n"
+
+#~ msgid "You cannot use the mounted and mountpoint flags together"
+#~ msgstr "Ðе може да използвате едновременно опциите -m и -c"
+
+#, c-format
+#~ msgid "Cannot open /etc/mtab: %s\n"
+#~ msgstr "Ðе може да Ñе отвори /etc/mtab: %s\n"
+
+#, c-format
+#~ msgid "Internal error: MAX_DEPTH not big enough.\n"
+#~ msgstr "Вътрешна грешка: ÑтойноÑтта на MAX_DEPTH не е доÑтатъчно голÑма.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -u ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a show command line arguments\n"
+#~ " -A use ASCII line drawing characters\n"
+#~ " -c don't compact identical subtrees\n"
+#~ " -h highlight current process and its ancestors\n"
+#~ " -H PID highlight this process and its ancestors\n"
+#~ " -G use VT100 line drawing characters\n"
+#~ " -l don't truncate long lines\n"
+#~ " -n sort output by PID\n"
+#~ " -p show PIDs; implies -c\n"
+#~ " -u show uid transitions\n"
+#~ " -U use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V display version information\n"
+#~ msgstr ""
+#~ "Използване: pstree [ -a ] [ -c ] [ -h | -H ПРОЦЕС ] [ -l ] [ -n ] [ -p ] "
+#~ "[ -u ]\n"
+#~ " [ -A | -G | -U ] [ ПРОЦЕС | ПОТРЕБ ]\n"
+#~ " pstree -V\n"
+#~ "Извежда дървото на процеÑите.\n"
+#~ "\n"
+#~ " -a извежда аргументите от командните редове\n"
+#~ " -A използва Ñамо ASCII-знаци за линиите\n"
+#~ " -c не Ñвива идентичните поддървета\n"
+#~ " -h подчертава Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ предшеÑтвениците му\n"
+#~ " -H ПРОЦЕС подчертава този Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ предшеÑтвениците му\n"
+#~ " -G използва пÑевдографичните знаци на VT100\n"
+#~ " -l не отÑича дългите редове\n"
+#~ " -n Ñортира изхода Ñпоред номера на процеÑа\n"
+#~ " -p извежда номерата на процеÑите; влече -c\n"
+#~ " -u поÑочва промените на ÑобÑтвеника\n"
+#~ " -U използва пÑевдографичните знаци на UTF-8 (Уникод)\n"
+#~ " -V извежда Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑта на pstree\n"
+
+#, c-format
+#~ msgid " -Z show SELinux security contexts\n"
+#~ msgstr " -Z показва контекÑта на ÑигурноÑÑ‚ за SELinux\n"
+
+#~ msgid "Cannot open protocol file \"%s\": %s"
+#~ msgstr "Ðе може да Ñе отвори файлът за протокол „%s“: %s"
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
+s/“/“/g
+s/â€/â€/g
+s/‘/‘/g
+s/’/’/g
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644
index 0000000..41ef132
--- /dev/null
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..3c654a3
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,824 @@
+# Catalan translation for psmisc.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Guillem Jover <guillem@debian.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 21.6cvs\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2004-12-08 12:46+0100\n"
+"Last-Translator: Guillem Jover <guillem@debian.org>\n"
+"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/fuser.c:146
+#, fuzzy, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Forma d'ús:\n"
+" fuser [ -a | -s | -c ] [ -n espai ] [ -senyal ] [ -kimuv ] nom ...\n"
+" [ - ] [ -n espai ] [ -senyal ] [ -kimuv ] nom ...\n"
+" fuser -l\n"
+" fuser -V\n"
+"\n"
+" -a mostra també fitxers no usats\n"
+" -c sistemes de fitxers muntats\n"
+" -f ignorat silenciosament (per compatibilitat amb POSIX)\n"
+" -k matar els processos que accedeixen a aquest fitxer\n"
+" -i pregunta abans de matar (ignorat sense -k)\n"
+" -l llista els noms dels senyals\n"
+" -m sistema de fitxers muntat\n"
+" -n espai busca en l'espai de noms especificat (file, udp o tcp)\n"
+" -s operació silenciosa\n"
+" -senyal envia «senyal» en comptes de SIGKILL\n"
+" -u mostra ids d'usuari\n"
+" -v mode verbal\n"
+" -V mostra informació de la versió\n"
+" -4 busca només sòcols IPv4\n"
+" -6 busca només sòcols IPv6\n"
+" - inicialitza opcions\n"
+"\n"
+" noms udp/tcp: [port_local][,[hoste_remot][,[port_remot]]]\n"
+"\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+
+#: src/fuser.c:176
+#, fuzzy, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (psmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2002 Werner Almesberger i Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc ve ABSOLUTAMENT SENSE CAP GARANTIA.\n"
+"Això és software lliure, i esteu convidats a redistribuir-lo sota els "
+"termes\n"
+"de la llicencia publica general de GNU.\n"
+"Per a més informació sobre aquests assumptes, vegeu el fitxer COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr ""
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr ""
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr ""
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr ""
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr ""
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr ""
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr ""
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr ""
+
+#: src/fuser.c:1175
+#, fuzzy, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s/%s: especificació no vàlida\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr ""
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr ""
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr ""
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr ""
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr ""
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+
+#: src/fuser.c:1474
+#, fuzzy, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr ""
+"\n"
+"%*s USUARI PID ACCÉS ORDRE\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr ""
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr ""
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr ""
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Voleu matar el procés %d? (s/N)"
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr ""
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr ""
+
+#: src/fuser.c:1971
+#, fuzzy, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "no s'ha pogut trobar el nombre de dispositiu del sòcol"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Voleu matar %s(%s%d)? (s/N) "
+
+#: src/killall.c:114
+#, fuzzy, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Voleu matar %s(%s%d)? (s/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr ""
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr ""
+
+#: src/killall.c:525
+#, fuzzy, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "s'evitarà la coincidència parcial %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "S'ha matat %s(%s%d) amb el senyal %d\n"
+
+#: src/killall.c:796
+#, fuzzy, c-format
+msgid "%s: no process found\n"
+msgstr "%s: no s'ha matat cap procés\n"
+
+#: src/killall.c:837
+#, fuzzy, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Forma d'ús: killall [ OPCIONS ] [ -- ] nom ...\n"
+
+#: src/killall.c:839
+#, fuzzy, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V --version\n"
+"\n"
+" -e,--exact requereix coincidència exacta per a noms molt llargs\n"
+" -I,--ignore-case coincidència de nom sense sensibilitat a majúscules\n"
+" -g,--process-group mata el grup del procés en comptes del procés\n"
+" -i,--interactive pregunta abans de matar\n"
+" -l,--list llista tots els noms de senyals coneguts\n"
+" -q,--quiet no mostra queixes\n"
+" -s,--signal envia «senyal» en comptes de «SIGTERM»\n"
+" -v,--verbose informa si el senyal s'ha enviat amb èxit\n"
+" -V,--version mostra informació de versió\n"
+" -w,--wait espera fins que el procés mori\n"
+"\n"
+
+#: src/killall.c:859
+#, fuzzy, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -d,--sid només mata processos que tinguin sid\n"
+" -c,--context només mata processos que tinguin scontext\n"
+" (-s, -c són mútuament excloents i han de precedir altres arguments)\n"
+"\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr ""
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr ""
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr ""
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr ""
+
+#: src/killall.c:1057
+#, fuzzy, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "El nombre màxim de noms és %d\n"
+
+#: src/killall.c:1062
+#, fuzzy, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "%s és buit (no s'ha muntat?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr ""
+
+#: src/peekfd.c:191
+#, fuzzy, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "pstree (psmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+
+#: src/prtstat.c:65
+#, fuzzy, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "pstree (psmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2002 Werner Almesberger i Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr ""
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr ""
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr ""
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr ""
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr ""
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr ""
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr ""
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr ""
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr ""
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr ""
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr ""
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr ""
+
+#: src/prtstat.c:318
+#, fuzzy
+msgid "Invalid option"
+msgstr "%s/%s: especificació no vàlida\n"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr ""
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s és buit (no s'ha muntat?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+
+#: src/pstree.c:1324
+#, fuzzy, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -s mostra els SID de Flask\n"
+" -x mostra els contextes de seguretat de Flask\n"
+
+#: src/pstree.c:1326
+#, fuzzy, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+" -U usar caràcters de dibuix de línia UTF-8 (Unicode)\n"
+" -V mostra informació de la versió\n"
+" pid comença en pid, predeterminat 1 (init)\n"
+" user només mostra arbres amb arrel en processos d'aquest usuari\n"
+"\n"
+
+#: src/pstree.c:1334
+#, fuzzy, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (psmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM no està especificada\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "No s'han pogut obtenir les capacitats\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr ""
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "No existeix aquest nom d'usuari: %s\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+msgid "Process %d not found.\n"
+msgstr "No s'han trobat processos.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "No s'han trobat processos.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Premeu retorn per a tancar\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: senyal desconegut. «%s -l» llista els senyals.\n"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2002 Werner Almesberger i Craig Small\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Forma d'ús: killall [-s sid] [-c context] [ -egiqvw ] [ -senyal ] "
+#~ "nom ...\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) 1993-2017 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2002 Werner Almesberger i Craig Small\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2002 Werner Almesberger i Craig Small\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Forma d'ús: pstree [ -a ] [ -c ] [ -h | -H pid ] [ -l ] [ -n ] [ -p ] [ -"
+#~ "u ]\n"
+#~ " [ -A | -G | -U ] [ pid | usuari ]\n"
+#~ " pstree -V\n"
+#~ "\n"
+#~ " -a mostra els arguments de la línia d'ordres\n"
+#~ " -A usa caràcters de dibuix de línia ASCII\n"
+#~ " -c no compactar subarbres idèntics\n"
+#~ " -h ressaltar el procés actual i els seus ancestres\n"
+#~ " -H pid ressaltar el procés «pid» i els seus ancestres\n"
+#~ " -G usa caràcters de dibuix de línia VT100\n"
+#~ " -l no tallar les línies llargues\n"
+#~ " -n ordenar sortida per PID\n"
+#~ " -p mostra els PID; implica -c\n"
+#~ " -u mostra transicions de uid\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2002 Werner Almesberger i Craig Small\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2002 Werner Almesberger i Craig Small\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: pidof [ -eg ] nom ...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e requereix coincidència exacta per a noms molt llargs;\n"
+#~ " s'eviten si la línia d'ordres no està disponible\n"
+#~ " -g mostra l'ID del grup de procés en comptes de l'ID de procés\n"
+#~ " -V mostra informació de versió\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2002 Werner Almesberger i Craig Small\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Internal error: MAX_DEPTH not big enough.\n"
+#~ msgstr "MAX_DEPTH no és prou gran.\n"
+
+#~ msgid "%s: SID (%s) must be numeric\n"
+#~ msgstr "%s: el SID (%s) ha de ser numèric\n"
+
+#~ msgid "-4 flag used but proc file %s is not readable\n"
+#~ msgstr ""
+#~ "s'ha usat l'argument -4 però el fitxer proc %s no s'ha pogut llegir\n"
+
+#~ msgid "-6 flag used but proc file %s is not readable\n"
+#~ msgstr ""
+#~ "s'ha usat l'argument -6 però el fitxer proc %s no s'ha pogut llegir\n"
+
+#~ msgid "kill %d"
+#~ msgstr "mata %d"
+
+#~ msgid "No automatic removal. Please use umount %s\n"
+#~ msgstr "No s'eliminarà automàticament. Si us plau useu «umount %s»\n"
+
+#~ msgid "No automatic removal. Please use swapoff %s\n"
+#~ msgstr "No s'eliminarà automàticament. Si us plau useu «swapoff %s»\n"
+
+#~ msgid "Internal error (type %d)\n"
+#~ msgstr "Error intern (tipus %d)\n"
+
+#~ msgid "kernel mount "
+#~ msgstr "muntatge de nucli "
+
+#~ msgid "kernel loop "
+#~ msgstr "bucle de nucli "
+
+#~ msgid "kernel swap "
+#~ msgstr "intercanvi de nucli "
+
+#~ msgid "ignoring -m in name space \"%s\"\n"
+#~ msgstr "s'està ignorant -m en l'espai de noms «%s»\n"
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644
index 0000000..99038ec
--- /dev/null
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..4d416aa
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,844 @@
+# Czech translation of psmisc.
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Petr Pisar <petr.pisar@atlas.cz>, 2009, 2010, 2012, 2013, 2014, 2017, 2018.
+# Petr Pisar <petr.pisar@atlas.cz>, 2019, 2021, 2022, 2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-13 20:33+01:00\n"
+"Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Použití: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n PROSTOR]\n"
+" [-k [-i] [-SIGNÃL]] NÃZEV…\n"
+" fuser -l\n"
+" fuser -V\n"
+"Ukáže, které procesy používají vyjmenované soubory, sockety nebo souborové\n"
+"systémy.\n"
+"\n"
+" -a,--all zobrazí rovněž nepoužité soubory\n"
+" -i,--interactive před zabitím se dotáže (ignorováno bez -k)\n"
+" -I,--inode pro porovnání souborů vždy použije iuzly\n"
+" -k,--kill zabije procesy přistupující k zadanému souboru\n"
+" -l,--list-signals vypíše seznam názvů dostupných signálů\n"
+" -m,--mount zobrazí všechny procesy používající zadané "
+"souborové\n"
+" systémy nebo bloková zařízení\n"
+" -M,--ismountpoint vyhoví požadavku, pouze když NÃZEV je bod pÅ™ipojení "
+"FS\n"
+" -n,--namespace PROSTOR hledá v tomto jmenném prostoru\n"
+" (file [soubor], udp, nebo tcp)\n"
+" -s,--silent tichý běh\n"
+" -SIGNÃL namísto SIGKILL poÅ¡le tento signál\n"
+" -u,--user zobrazí ID uživatelů\n"
+" -v,--verbose podrobný výstup\n"
+" -w,--writeonly zabije jen procesy přistupující kvůli zápisu\n"
+" -V,--version zobrazí informace o verzi\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 hledá pouze mezi IPv4 sockety\n"
+" -6,--ipv6 hledá pouze mezi IPv6 sockety\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" Názvy UDP/TCP: [místní_port][,[vzdálený_stroj][,[vzdálený_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 1993–2024 Werner Almesberger a Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc je dodáván BEZ ABSOLUTNÄš ŽÃDNÉ ZÃRUKY.\n"
+"Toto je svobodné programové vybavení, můžete jej šířit podle podmínek\n"
+"GNU Obecné veřejné licence (GPL).\n"
+"Podrobnosti v této záležitosti naleznete v souborech pojmenovaných COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Adresář /proc nelze otevřít: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Paměť pro odpovídající proc nelze alokovat: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Soubor zadaného názvu %s neexistuje.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Nelze získat informace (stat(2)) o %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Místní port %s nelze přeložit: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Neznámá rodina adres %d místního portu\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Soubor s protokoly „%s“ nelze otevřít: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Soubor zadaného názvu %s není přípojným bodem.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Neplatný pÅ™epínaÄ %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "PÅ™epínaÄ jmenného prostoru vyžaduje argument."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Neplatný název jmenného prostoru"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Spolu s pÅ™epínaÄi bodů pÅ™ipojení lze použít jen soubory"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Žádné kritérium procesu nebylo zadáno"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "PÅ™epínaÄ -a nelze použít spolu s pÅ™epínaÄem -s."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Nelze souÄasnÄ› hledat jen v IPv4 a jen v IPv6 socketech."
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s UŽIVATEL PID PŘÃSTUP PŘÃKAZ\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(neznámo)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "O souboru %s nelze získat informace: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "/proc/net/unix nelze otevřít: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Zabít proces %d? (a/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Proces %d nebylo možné zabít: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Síťový socket nelze otevřít.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Nelze nalézt Äíslo zařízení socketu.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Zabít %s(%s%d)? (a/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Zaslat signál %s(%s%d) ? (a/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Z procesového souboru „status“ nelze získat UID\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Chybný regulární výraz: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: ÄásteÄná shoda %s(%d) se vynechá\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d) zabit signálem %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: žádný proces nenalezen\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Použití: killall [PŘEPÃNAČ…] [--] NÃZEV…\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact u velmi dlouhých názvu vyžaduje přesnou shodu\n"
+" -I,--ignore-case porovnávání názvů procesů nebere ohled na velikost "
+"písmen\n"
+" -g,--process-group zabije skupinu procesů namísto procesu\n"
+" -y,--younger-than zabije procesy mladší než ČAS\n"
+" -o,--older-than zabije procesy starší než ČAS\n"
+" -i,--interactive před zabitím se zeptá\n"
+" -l,--list vypíše názvy všech známých signálů\n"
+" -q,--quiet nevypisuje stížnosti\n"
+" -r,--regexp s NÃZVEM zachází jako s rozšířeným regulárním výrazem\n"
+" -s,--signal SIGNÃL odeÅ¡le tento signál namísto SIGTERM\n"
+" -u,--user UŽIVATEL zabije pouze proces(y) bežící jako UŽIVATEL\n"
+" -v,--verbose ohlásí úspěšně odeslaný signál\n"
+" -V,--version zobrazí informace o verzi\n"
+" -w,--wait Äeká, dokud proces nezemÅ™e\n"
+" -n,--ns PID vybere procesy, které patří do stejných jmenných\n"
+" prostorů jako PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGVÃR zabije jen proces(y) mající kontext\n"
+" (musí předcházet ostatním argumentům)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Neplatný formát Äasu"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Uživatele %s nelze nalézt\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Neplatný PID jmenného prostoru"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Chybný regulární výraz: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Maximální poÄet názvů je %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s postrádá záznamy procesů (není připojen?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Chyba při připojování se na PID %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright © 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Použití: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<df>…]\n"
+" -8, --eight-bit-clean na výstupu neodstraňuje z datových proudů\n"
+" osmý bit.\n"
+" -n, --no-headers nezobrazuje Ätení/zápis z hlaviÄek\n"
+" deskriptoru.\n"
+" -c, --follow špehuje též nové potomky.\n"
+" -t, --tgid špehuje všechna vlákna, jejichž TGID je\n"
+" roven <pid>.\n"
+" -d, --duplicates-removed z výstupu odstraňuje duplicitní Ätení/"
+"zápisy.\n"
+" -V, --version vypíše údaje o verzi.\n"
+" -h, --help vypíše tuto nápovědu.\n"
+"\n"
+" Výstup ukonÄíte stiskem Ctrl-C.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Použití: prtstat [PŘEPÃNAÄŒE] PID…\n"
+" prtstat -V\n"
+"Zobrazí informace o procesu\n"
+" -r,--raw Neopracovaný výstup\n"
+" -V,--version Zobrazí informace o verzi a skonÄí\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 2009–2024 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "běží"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "spí"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "Äeká na disk"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "trasován"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "odstránkován"
+
+# `uknown' state
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "neznámý"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Proces: %-14s\t\tStav: %c (%s)\n"
+" CPU Ä.: %-3d\t\tTTY: %s\tVláken: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"ID procesu, skupiny a relace\n"
+" ID procesu: %d\t\t ID rodiÄe: %d\n"
+" ID skupiny: %d\t\t ID relace: %d\n"
+" ID skupiny vl.: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Výpadky stránek\n"
+" Tento proces (menší větší): %8lu %8lu\n"
+" Procesy potomků (menší větší): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"ÄŒasy CPU\n"
+" Tento proces (uživ systém host blokI/O): %6.2f %6.2f %6.2f %6.2f\n"
+" Procesy potomků (uživ systém host): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Paměť\n"
+" Vvelikost: %-10s\n"
+" RSS: %-10s \t\t Omezení RSS: %s\n"
+" ZaÄátek kódu: %#-10lx\t\t Konec kódu: %#-10lx\n"
+" ZaÄátek zásobníku: %#-10lx\n"
+" Ukazatel na zásobník (ESP): %#10lx Ukazatel na kód (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Plánování\n"
+" Politika %s\n"
+" Nice: %ld \t\t Priorita reálného Äasu: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf v print_stat selhala.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Proces s PID %d neexistuje.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Soubor se statistikou PID %d nelze otevřít (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Paměť pro proc_info nelze alokovat\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Soubor se statistikou nelze prohlédnout"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Neplatný pÅ™epínaÄ"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Je třeba zadat alespoň jedno PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc není připojen, nelze získat informace o /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s je prázdný (není připojen?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Použití: pstree [-acglpsStTuZ] [-h|-H PID] [-n|-N DRUH]\n"
+" [-A|-G|-U] [PID|UŽIVATEL]\n"
+" nebo: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Zobrazí strom procesů.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments zobrazí argumenty příkazového řádku\n"
+" -A, --ascii použije znaky ASCII pro kreslení Äar\n"
+" -c, --compact nesluÄuje identické podstromy\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=DRUH obarví procesy podle atributu\n"
+" (věk)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids zobrazí ID skupin procesů; implikuje -c\n"
+" -G, --vt100 použije znaky VT100 pro kreslení Äar\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all zvýrazní souÄasný proces a jeho pÅ™edky\n"
+" -H PID, --highlight-pid=PID\n"
+" zvýrazní tento proces a jeho předky\n"
+" -l, --long nezkracuje dlouhé řádky\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort seřadí výstup podle PID\n"
+" -N DRUH, --ns-sort=DRUH\n"
+" seřadí výstup podle druhu jmenného prostoru\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids zobrazí PID; implikuje -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents zobrazí rodiÄe vybraného procesu\n"
+" -S, --ns-changes zobrazí přechody mezi jmennými prostory\n"
+" -t, --thread-names zobrazí celé názvy vláken\n"
+" -T, --hide-threads skryje vlákna, zobrazí pouze procesy\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes zobrazí přechody UID\n"
+" -U, --unicode použije znaky UTF-8 (Unicode) pro kreslení Äar\n"
+" -V, --version zobrazí údaje o verzi\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" zobrazí bezpeÄnostní atributy\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID zaÄne na tomto PID; výchozí je 1 (init)\n"
+" UŽIVATEL zobrazí jen stromy, jejichž kořeny náleží tomuto uživateli\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "Proměnná TERM není nastavena\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Nelze zjistit schopnosti terminálu\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "proc soubor pro jmenný prostor %s není dostupný\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Žádný uživatel se jménem: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Proces %d nenalezen.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Žádný proces nenalezen.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Uzavřete klávesou Enter\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: neznámý signál, %s -l vypíše signály.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993–2021 Werner Almesberger a Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Použití: killall [-Z KONTEXT] [-u UŽIVATEL] [-y ČAS ] [-o ČAS] [-"
+#~ "eIgiqrvw]\n"
+#~ " [-s SIGNÃL | -SIGNÃL] NÃZEV…\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Použití: pstree [-acglpsStTu] [-h|-H PID] [-n|-N DRUH]\n"
+#~ " [-A|-G|-U] [PID|UŽIVATEL]\n"
+#~ " nebo: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993–2019 Werner Almesberger a Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Použití: pstree [-acglpsStuZ] [-h | -H PID ] [-n | -N DRUH]\n"
+#~ "Použití: pstree [-acglpsStu] [-h | -H PID] [-n | -N DRUH]\n"
+#~ " [-A|-G|-U] [PID|UŽIVATEL]\n"
+#~ " pstree -V\n"
+#~ "Zobrazí strom procesů.\n"
+#~ "\n"
+#~ " -a, --arguments zobrazí argumenty příkazového řádku\n"
+#~ " -A, --ascii použije znaky ASCII pro kreslení Äar\n"
+#~ " -c, --compact nesluÄuje identické podstromy\n"
+#~ " -h, --highlight-all zvýrazní souÄasný proces a jeho pÅ™edchůdce\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID zvýrazní tento proces a jeho předchůdce\n"
+#~ " -g, --show-pgids zobrazí ID skupin procesů; implikuje -c\n"
+#~ " -G, --vt100 použije znaky VT100 pro kreslení Äar\n"
+#~ " -l, --long nezkracuje dlouhé řádky\n"
+#~ " -n, --numeric-sort seřadí výstup podle PID\n"
+#~ " -N druh,\n"
+#~ " --ns-sort=druh seřadí výstup podle druhu jmenného prostoru\n"
+#~ " (cgroup, ipc, mnt, net, pid, user, uts)\n"
+#~ " -p, --show-pids zobrazí PID; implikuje -c\n"
+#~ " -s, --show-parents zobrazí rodiÄe vybraného procesu\n"
+#~ " -S, --ns-changes zobrazí přechody mezi jmennými prostory\n"
+#~ " -t, --thread-names zobrazí celé názvy vláken\n"
+#~ " -T, --hide-threads skryje vlákna, zobrazí pouze procesy\n"
+#~ " -u, --uid-changes zobrazí přechody UID\n"
+#~ " -U, --unicode použije znaky UTF-8 (Unicode) pro kreslení Äar\n"
+#~ " -V, --version zobrazí informace o verzi\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993–2014 Werner Almesberger a Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993–2012 Werner Almesberger a Craig Small\n"
+#~ "\n"
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644
index 0000000..106c491
--- /dev/null
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..7dd9e19
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,826 @@
+# Danish translation of psmisc.
+# Copyright (C) 2018 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Aputsiaq Niels Janussen <aj@isit.gl>, 2011.
+# Joe Hansen <joedalton2@yahoo.dk>, 2016, 2017, 2018, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.5rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2022-05-28 18:11+0200\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.6.1\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Brug: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAVN...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Vis hvilke processer, der bruger de navngivne filer, sokler eller "
+"filsystemer.\n"
+"\n"
+" -a,--all vis også ubrugte filer\n"
+" -i,--interactive spørg før der dræbes (ignoreres uden -k)\n"
+" -I,--inode brug altid iknuder til at sammenligne filer\n"
+" -k,--kill dræb processer som tilgår den navngivne fil\n"
+" -l,--list-signals vis tilgængelige signalnavne\n"
+" -m,--mount vis alle processer med brug af de navngivne "
+"filsystemer\n"
+" eller blokenhed\n"
+" -M,--ismountpoint udfør kun forespørgsel hvis NAVN er et "
+"monteringspunkt\n"
+" -n,--namespace RUM søg i dette navneområde (file, udp eller tcp)\n"
+" -s,--silent stille kørsel\n"
+" -SIGNAL send dette signal i stedet for SIGKILL\n"
+" -u,--user vis id for brugere\n"
+" -v,--verbose udskriv uddybende information\n"
+" -w,--writeonly dræb kun processer med skriveadgang\n"
+" -V,--version vis information om version\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 søg kun IPv4-sokler\n"
+" -6,--ipv6 søg kun IPv6-sokler\n"
+
+#: src/fuser.c:170
+#, fuzzy, c-format
+#| msgid ""
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" - nulstil tilvalg\n"
+"\n"
+" udp/tcp-navne: [lokal_port][,[rmt_vært][,[rmt_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Ophavsret 1993-2022 Werner Almesberger og Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc leveres med absolut ingen garanti.\n"
+"Dette er fri software, og du er velkommen til at videredistribuere\n"
+"det under vilkårene i GNU General Public License.\n"
+"Yderligere oplysninger om disse sager, se filerne med navnene COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Kan ikke åbne mappen /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Kan ikke allokere hukommelse til matchede proc: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Angivne filnavn %s findes ikke.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Kan ikke udføre stat %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Kan ikke løse lokal port %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Ukendt lokal port AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Kan ikke åbne protokolfil »%s«: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Angivne filnavn %s er ikke et monteringspunkt.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Ugyldigt tilvalg %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Tilvalg for navneområde kræver et argument."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Ugyldigt navn på navneområde"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Du kan kun bruge filer med et angivet monteringspunkt"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Ingen specifikation angivet for proces"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "tilvalget --all kan ikke anvendes med tilvalget --silent."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"Du kan ikke begrænse søgning til blot IPv4- og IPv6-sokler på samme tid"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s BRUGER PID ADGANG KOMMANDO\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(ukendt)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Kan ikke danne stat-fil %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Kan ikke åbne /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Dræb proces %d ? (j/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Kunne ikke dræbe proces %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Kan ikke åbne en netværkssokkel.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Kan ikke finde sokkels enhedsnummer.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Dræb %s(%s%d) ? (j/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Signal %s(%s%d) ? (j/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Kan ikke hente UID fra status for proces\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Ugyldigt regulært udtryk: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: springer over delvist match %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Dræbte %s(%s%d) med signal %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: ingen proces fundet\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Brug: killall [TILVALG]... [--] NAVN...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact kræver eksakt match for meget lange navne\n"
+" -I,--ignore-case ikke-versalfølsom match af navn på proces\n"
+" -g,--process-group dræb proces-gruppe i stedet for proces\n"
+" -y,--younger-than dræb processer yngre end TID\n"
+" -o,--older-than dræb processer ældre end TID\n"
+" -i,--interactive spørg efter bekræftelse før der dræbes\n"
+" -l,--list vis alle kendte signalnavne\n"
+" -q,--quiet udskriv ikke reklamationer\n"
+" -r,--regexp fortolk NAVN som et udvidet regulært udtryk\n"
+" -s,--signal SIGNAL send dette signal i stedet for SIGTERM\n"
+" -u,--user BRUGER dræb kun proces(ser) som kører som BRUGER\n"
+" -v,--verbose rapportér hvis signalet blev sendt med succes\n"
+" -V,--version vis information om version\n"
+" -w,--wait vent på at processer dør\n"
+" -n,--ns PID match processer som tilhører det samme navnerum\n"
+" som PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGUDTRYK dræb kun proces(ser) som har kontekst\n"
+" (skal stå før andre argumenter)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Ugyldigt tidsformat"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Kan ikke finde brugeren %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Ugyldig PID for navneområde"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Ugyldigt regulært udtryk: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Maksimalt antal navne er %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s mangler proceselementer (ikke monteret)?\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Fejl ved tilslutning til pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Ophavsret 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Brug: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean giver uddata i rene 8-bit strømme.\n"
+" -n, --no-headers vis ikke læsning/skrivning fra fd-headere.\n"
+" -c, --follow smugkig også på alle nye barneprocesser.\n"
+" -t, --tgid kig på alle tråde hvor tgid er lig med "
+"<pid>.\n"
+" -d, --duplicates-removed fjern duplikerede læsninger/skrivninger fra "
+"uddata.\n"
+" -V, --version udskriver versionsinfo.\n"
+" -h, --help udskriver denne hjælpetekst.\n"
+"\n"
+" Tryk CTRL-C for at stoppe uddata.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Brug: prtstat [tilvalg] PID ...\n"
+" prtstat -V\n"
+"Udskriv information om en proces\n"
+" -r,--raw RÃ¥ visning af information\n"
+" -V,--version Vis information om version og afslut\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2020 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Ophavsret 2009-2020 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "kører"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "sover"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "disk sover"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "spores"
+
+# Denne har jeg ladet stå uoversat, måske paginering eller side
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "paging"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "ukendt"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Proces: %-14s\t\tTilstand: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tTråde: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Proces, Gruppe og Sessions-ID'er\n"
+" Proces ID: %d\t\t Forælder-ID: %d\n"
+" Gruppe-ID: %d\t\t Sessions-ID: %d\n"
+" T Gruppe-ID: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Sidefejl\n"
+" Denne proces (minor major): %8lu %8lu\n"
+" Barneprocesser (minor major): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU-tider\n"
+" Denne proces (bruger system gæst blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Barneprocesser (bruger system gæst): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Hukommelse\n"
+" Vstørrelse: %-10s\n"
+" RSS: %-10s \t\t RSS-grænse: %s\n"
+" Kodestart: %#-10lx\t\t Kodestop: %#-10lx\n"
+" Stakstart: %#-10lx\n"
+" Stakpeger (ESP): %#10lx\t Inst-peger (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Skedulering\n"
+" Politik: %s\n"
+" Venlig: %ld \t\t RT-prioritet: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf i print_stat mislykkedes.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Processen med pid %d findes ikke.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Ikke i stand til at åbne stat-fil for pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Kan ikke allokere hukommelse til proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Ikke i stand til at skanne stat-fil"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Ugyldigt tilvalg"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Du skal mindst angive én PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc er ikke monteret, kan ikke udføre stat for /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s er tom (ikke monteret)?\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Brug: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" eller: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Vis et procestræ.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments vis kommandolinje-argumenter\n"
+" -A, --ascii anvend ASCII-skrifttegn til linjetegn\n"
+" -c, --compact undlad at sammenpakke identiske understrukturer\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TYPE farvelæg process efter attribut\n"
+" (alder)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids vis procesgruppe-id'er; -c er underforstået\n"
+" -G, --vt100 anvend VT100-skrifttegn til linjetegn\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all fremhæv nuværende proces og dens forfædre\n"
+" -H PID, --highlight-pid=PID\n"
+" fremhæv denne proces og dens forfædre\n"
+" -l, --long undlad at afkorte lange linjer\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort sorter uddata efter PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sorter efter navnerumstype\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids vis PID'er; -c er underforstået\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents vis overprocesser for den valgte proces\n"
+" -S, --ns-changes vis navnerumsovergange\n"
+" -t, --thread-names vis fulde trådnavne\n"
+" -T, --hide-threads skjul tråde og vis kun processer\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes vis uid-overgange\n"
+" -U, --unicode anvend UTF-8-skrifttegn (Unicode) til linjetegn\n"
+" -V, --version vis information om version\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" vis sikkerhedsattributter\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID start ved denne PID; standard er 1 (init)\n"
+" USER vis kun træstrukturer som har denne bruger som rod\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM er ikke angivet\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Kan ikke skaffe oplysninger om terminalens funktioner\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "procfs-fil for %s-navnerum er ikke tilgængelig\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Brugernavnet findes ikke: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Processen %d blev ikke fundet.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Fandt ingen processer.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Tryk retur for at lukke\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: ukendt signal; %s -l viser signaler.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Ophavsret 1993-2021 Werner Almesberger og Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Brug: killall [-Z KONTEKST ] [-u BRUGER] [ -y TIDSPUNKT ] [ -o "
+#~ "TIDSPUNKT ]\n"
+#~ " [ -eIgiqrvw ] [ -s SIGNAL | -SIGNAL ] NAVN...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Brug: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Brug: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | BRUGER ]\n"
+#~ " pstree -V\n"
+#~ "Vis en træstruktur over processer.\n"
+#~ "\n"
+#~ " -a, --arguments vis kommandolinje-argumenter\n"
+#~ " -A, --ascii anvend ASCII-skrifttegn til linjetegn\n"
+#~ " -c, --compact undlad at sammenpakke identiske understrukturer\n"
+#~ " -h, --highlight-all fremhæv nuværende proces og dens forfædre\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID fremhæv denne proces og dens forfædre\n"
+#~ " -g, --show-pgids vis procesgruppe-id'er; -c er underforstået\n"
+#~ " -G, --vt100 anvend VT100-skrifttegn til linjetegn\n"
+#~ " -l, --long undlad at afkorte lange linjer\n"
+#~ " -n, --numeric-sort sortér uddata ved PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sorter efter navnerumstype (ipc, mnt, net, pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids vis PID'er; -c er underforstået\n"
+#~ " -s, --show-parents vis overprocesser for den valgte proces\n"
+#~ " -S, --ns-changes vis navnerumsovergange\n"
+#~ " -t, --thread-names vis fulde trådnavne\n"
+#~ " -T, --hide-threads skjul tråde og vis kun processer\n"
+#~ " -u, --uid-changes vis uid-overgange\n"
+#~ " -U, --unicode anvend UTF-8-skrifttegn (Unicode) til linjetegn\n"
+#~ " -V, --version vis information om version\n"
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644
index 0000000..aca49a5
--- /dev/null
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..54fae26
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,892 @@
+# German translation for PSmisc programs.
+# Copyright (C) 2002, 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Wolfgang Schorer <wcc@wolfgangs.com>, 2002.
+# Benno Schulenberg <benno@vertaalt.nl>, 2007.
+# Roland Illig <roland.illig@gmx.de>, 2009-2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-14 19:10+0100\n"
+"Last-Translator: Roland Illig <roland.illig@gmx.de>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.4.2\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Aufruf: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n RAUM]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Anzeigen, welche Prozesse die angegebenen Dateien, Sockets oder Dateisysteme "
+"benutzen.\n"
+"\n"
+" -a,--all auch ungenutzte Dateien anzeigen\n"
+" -i,--interactive vor dem Abschießen nachfragen (ohne -k wirkungslos)\n"
+" -I,--inode immer Inodes benutzen, um Dateien zu vergleichen\n"
+" -k,--kill Prozesse abschießen, die auf die angegebene Datei "
+"zugreifen\n"
+" -l,--list-signals Signalnamen auflisten\n"
+" -m,--mount alle Prozesse anzeigen, die auf die angegebenen "
+"Dateisysteme\n"
+" oder Blockgeräte zugreifen\n"
+" -M,--ismountpoint Operation nur durchführen, wenn NAME ein "
+"Einhängepunkt ist\n"
+" -n,--namespace RAUM in angegebenem Namensraum suchen (file, udp oder "
+"tcp)\n"
+" -s,--silent stille Durchführung\n"
+" -SIGNAL SIGNAL anstatt SIGKILL senden\n"
+" -u,--user Benutzer-IDs anzeigen\n"
+" -v,--verbose ausführliche Ausgabe\n"
+" -w,--writeonly nur Prozesse mit Schreibzugriff beenden\n"
+" -V,--version Versionsinformationen anzeigen\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 nur IPv4-Sockets suchen\n"
+" -6,--ipv6 nur IPv6-Sockets suchen\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" udp/tcp-Namen: [lokaler_port][,[entfernter_rechner][,[entfernter_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"Für PSmisc gibt es KEINERLEI GARANTIE.\n"
+"Es ist freie Software und Sie dürfen sie gern gemäß den Bedingungen\n"
+"der GNU General Public License (GPL) weiter vertreiben.\n"
+"Weitere Informationen dazu finden Sie in der Datei namens COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Verzeichnis /proc kann nicht geöffnet werden: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Kein Speicher mehr verfügbar für zugehörigen Prozess: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Angegebener Dateiname %s existiert nicht.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Status von »%s« kann nicht ermittelt werden: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Lokaler Port %s kann nicht aufgelöst werden: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Unbekannter lokaler Port AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Protokolldatei »%s« kann nicht geöffnet werden: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Der angegebene Dateiname »%s« ist kein Einhängepunkt.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Ungültige Option %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Die Namensraum-Option benötigt ein Argument."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Ungültiger Namensraum"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Dateien können nur mit der Einhängepunkt-Option verwendet werden"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Keine Prozessspezifikation angegeben"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "Die Option »all« kann nicht mit der Option »silent« kombiniert werden."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"Es ist nicht möglich, gleichzeitig ausschließlich nach IPv4- und "
+"ausschließlich nach IPv6-Sockets zu suchen"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s BEN. PID ZUGR. BEFEHL\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(unbekannt)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Status der Datei %s kann nicht ermittelt werden: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "/proc/net/unix kann nicht geöffnet werden: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Prozess %d abbrechen? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Prozess %d kann nicht abgebrochen werden: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Netzwerkverbindung kann nicht geöffnet werden.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Gerätenummer des Sockets kann nicht gefunden werden.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "%s(%s%d) abbrechen? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Signal %s(%s%d) senden? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: UID kann nicht aus Prozessstatus ermittelt werden\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Ungültiger regulärer Ausdruck: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: Teilweise Übereinstimmung von %s(%d) wird übersprungen\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d) mit Signal %d beendet\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: Kein Prozess gefunden\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Aufruf: killall [OPTION] … [--] NAME …\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact genaue Übereinstimmung für sehr lange Namen verlangen\n"
+" -I,--ignore-case nicht zwischen Groß- und Kleinschreibung "
+"unterscheiden\n"
+" -g,--process-group Prozessgruppe statt Einzelprozess abbrechen\n"
+" -y,--younger-than Prozesse jünger als ZEIT abbrechen\n"
+" -o,--older-than Prozesse älter als ZEIT abbrechen\n"
+" -i,--interactive vor Abbruch Bestätigung des Benutzers einholen\n"
+" -l,--list alle bekannten Signalnamen auflisten\n"
+" -q,--quiet keine Warnungen und Fehler ausgeben\n"
+" -r,--regexp NAME ist ein erweiteter regulärer Ausdruck\n"
+" -s,--signal SIGNAL benutzerdefiniertes Signal anstatt SIGTERM senden\n"
+" -u,--user USER nur Prozesse von angegebenem Benutzer abbrechen\n"
+" -v,--verbose benachrichtigen, falls das Signal erfolgreich "
+"gesendet\n"
+" wurde\n"
+" -V,--version Version anzeigen\n"
+" -w,--wait auf das Beenden der Prozesse warten\n"
+" -n,--ns PID nur Prozesse aus demselben Namensraum wie PID\n"
+" berücksichtigen\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP nur Prozesse abbrechen, die einen Kontext haben\n"
+" (muss vor anderen Argumenten stehen)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Ungültiges Zeitformat"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Benutzer %s kann nicht gefunden werden\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Ungültige Namensraum-PID"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Ungültiger regulärer Ausdruck: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Die maximale Anzahl von Namen ist %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr ""
+"killall: Bei %s fehlen die Prozesseinträge (Dateisystem möglicherweise nicht "
+"eingehängt?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Fehler beim Anhängen an PID %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Aufruf: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <PID> [<fd> ..]\n"
+" -8, --eight-bit-clean 8-Bit-Ausgabe erzwingen.\n"
+" -n, --no-headers Header für Lesen/Schreiben aus FDs nicht\n"
+" anzeigen.\n"
+" -c, --follow Auch nach neuen Kindprozessen Ausschau "
+"halten.\n"
+" -t, --tgid Nach allen Threads Ausschau halten, deren "
+"tgid\n"
+" gleich <PID> ist.\n"
+" -d, --duplicates-removed Doppeltes Lesen/Schreiben nicht ausgeben.\n"
+" -V, --version Versionsinformationen ausgeben.\n"
+" -h, --help Diese Hilfe ausgeben.\n"
+"\n"
+" Drücken Sie Strg-C, um die Ausgabe zu beenden.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Aufruf: prtstat [Optionen] PID …\n"
+" prtstat -V\n"
+"Informationen über einen Prozess ausgeben\n"
+" -r,--raw Rohe Ausgabe der Informationen\n"
+" -V,--version Versionsinformationen anzeigen und beenden\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009–2024 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "läuft"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "schläft"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "schläft (Disk)"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "schritt"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "auslagerung"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "unbekannt"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Prozess: %-14s\t\tZustand: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Prozess-, Gruppen- und Session-IDs\n"
+" Prozess-ID: %d\t\t Eltern-ID: %d\n"
+" Gruppen-ID: %d\t\t Sitzungs-ID: %d\n"
+"T-Gruppen-ID: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Seitenfehler\n"
+" Dieser Prozess (klein groß): %8lu %8lu\n"
+" Kindprozesse (klein groß): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU-Zeiten\n"
+" Dieser Prozess (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Kindprozesse (user system guest): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Speicher\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS-Grenzwert: %s\n"
+" Code-Start: %#-10lx\t\t Code-Ende: %#-10lx\n"
+" Stack-Start: %#-10lx\n"
+" Stackzeiger (ESP): %#10lx\t Befehlszeiger (EIP): %#10lx\n"
+
+# Es gab schon einige Versuche, »nice« zu übersetzen, aber ich tendiere dazu, es unübersetzt zu lassen.
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Prozessplanung\n"
+" Richtlinie: %s\n"
+" Nice: %ld \t\t RT-Priorität: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf in print_stat fehlgeschlagen.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Prozess mit PID %d existiert nicht.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Stat-Datei für PID %d konnte nicht geöffnet werden: %s\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Kein Speicher mehr verfügbar für proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Stat-Datei konnte nicht geöffnet werden"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Ungültige Option"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Sie müssen mindestens eine PID angeben."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"/proc ist nicht eingehängt, /proc/self/stat kann nicht gelesen werden.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s ist leer (Dateisystem möglicherweise nicht eingehängt?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Aufruf: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N Art ]\n"
+" [ -A | -G | -U ] [ PID | NUTZER ]\n"
+" oder: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Einen Prozessbaum anzeigen.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments Kommandozeilenargumente anzeigen\n"
+" -A, --ascii Linien mit ASCII-Zeichen darstellen\n"
+" -c, --compact-not identische Teilbäume nicht zusammenfassen\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TYPE Prozesse nach Attributen einfärben\n"
+" (Alter)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids Prozessgruppen-IDs anzeigen; bewirkt -c\n"
+" -G, --vt100 Linien mit VT100-Zeichen darstellen\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all aktuellen Prozess und Vorgänger hervorheben\n"
+" -H PID, --highlight-pid=PID\n"
+" angegebenen Prozess und Vorgänger hervorheben\n"
+" -l, --long lange Zeilen nicht abschneiden\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort Ausgabe nach PID sortieren\n"
+" -N ART, --ns-sort=ART\n"
+" Ausgabe nach dieser Namensraumart sortieren\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids PIDs anzeigen; bewirkt -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents Eltern des ausgewählten Prozesses anzeigen\n"
+" -S, --ns-changes Namensraumübergänge anzeigen\n"
+" -t, --thread-names vollständige Threadnamen anzeigen\n"
+" -T, --hide-threads Threads verstecken, nur Prozesse anzeigen\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes UID-Änderungen anzeigen\n"
+" -U, --unicode Linien mit UTF-8-Zeichen (Unicode) darstellen\n"
+" -V, --version Versionsinformationen anzeigen\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" Sicherheitsattribute anzeigen\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID mit dieser PID starten; Vorgabewert ist 1 (init)\n"
+" NUTZER nur Prozessbäume zeigen, deren Wurzeln Prozesse dieses Benutzers "
+"sind\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM ist nicht gesetzt\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Fähigkeiten des Terminals konnten nicht erkannt werden\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "procfs-Datei für Namensraum »%s« nicht erreichbar\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Kein Benutzer mit dem Namen »%s«\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Prozess %d wurde nicht gefunden.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Keine Prozesse gefunden.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Drücken Sie Enter zum Schließen\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: unbekanntes Signal; %s -l listet die Signale auf.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger und Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Aufruf: killall [-Z CONTEXT] [-u USER] [-y TIME] [-o TIME] [-eIgiqrvw]\n"
+#~ " [-s SIGNAL | -SIGNAL] NAME …\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Aufruf: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | NUTZER ]\n"
+#~ " oder: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger und Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Aufruf: pstree [-acglpsStuZ] [-h | -H PID] [-n | -N Art]\n"
+#~ "Aufruf: pstree [-acglpsStu] [-h | -H PID] [-n | -N Art]\n"
+#~ " [-AGU] [PID | USER]\n"
+#~ " pstree -V\n"
+#~ "Einen Prozessbaum anzeigen.\n"
+#~ "\n"
+#~ " -a, --arguments Befehlszeilenargumente anzeigen\n"
+#~ " -A, --ascii ASCII-Zeichen für die Ausgabe benutzen\n"
+#~ " -c, --compact Identische Unterbäume nicht zusammenfassen\n"
+#~ " -h, --highlight-all Aktuellen Prozess und seine Ahnen hervorheben\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID Angegebenen Prozess und seine Ahnen hervorheben\n"
+#~ " -g, --show-pgids Prozessgruppen-IDs anzeigen; impliziert -c\n"
+#~ " -G, --vt100 VT100-Zeichen für die Ausgabe benutzen\n"
+#~ " -l, --long Lange Zeilen nicht abschneiden\n"
+#~ " -n, --numeric-sort Ausgabe nach PID sortieren\n"
+#~ " -N Art,\n"
+#~ " --ns-sort=type Nach Art des Namensraums sortieren\n"
+#~ " (ipc, mnt, net, pid, user, uts)\n"
+#~ " -p, --show-pids PIDs anzeigen; impliziert -c\n"
+#~ " -s, --show-parents Eltern des ausgewählten Prozesses anzeigen\n"
+#~ " -S, --ns-changes Wechsel des Namensraums anzeigen\n"
+#~ " -t, --thread-names Vollständige Threadnamen anzeigen\n"
+#~ " -T, --hide-threads Threads verstecken, nur Prozesse anzeigen\n"
+#~ " -u, --uid-changes Wechsel der UID anzeigen\n"
+#~ " -U, --unicode UTF-8 (Unicode) für die Ausgabe verwenden\n"
+#~ " -V, --version Verwendete Version ausgeben\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger und Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger und Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Aufruf: pidof [-eg] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e exakte Übereinstimmung für sehr lange Namen erforderlich;\n"
+#~ " ignorieren, wenn die Kommandozeile nicht verfügbar ist\n"
+#~ " -g zeige Prozessgruppen-ID statt der Prozess-ID\n"
+#~ " -V zeige Version\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger und Craig Small\n"
+#~ "\n"
+
+#~ msgid "You cannot use the mounted and mountpoint flags together"
+#~ msgstr ""
+#~ "Die Flags gemounted und mount-Punkt können nicht gleichzeitig verwendet "
+#~ "werden."
+
+#~ msgid "Cannot stat mount point %s: %s\n"
+#~ msgstr "Kann Status von Einhängepunkt \"%s\" nicht ermitteln: %s\n"
+
+#~ msgid "Cannot open /etc/mtab: %s\n"
+#~ msgstr "/etc/mtab kann nicht geöffnet werden: %s\n"
diff --git a/po/el.gmo b/po/el.gmo
new file mode 100644
index 0000000..d2e7974
--- /dev/null
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..c7b77e2
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,754 @@
+# translation of psmisc to Greek
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Lefteris Dimitroulakis <edimitro@tee.gr>, 2008, 2013, 2014.
+# Lefteris Dimitroulakis <ledimitro@gmail.com>, 2014, 2017, 2019, 2020, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-23.6-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2022-12-25 23:45+0200\n"
+"Last-Translator: Lefteris Dimitroulakis <ledimitro@gmail.com>\n"
+"Language-Team: Greek <team@lists.gnome.gr>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 2.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"ΧÏήση: fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-ΣΗΜΑ]] "
+"ΟÎΟΜΑ...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Οι διεÏγασίες που χÏησιμοποιοÏν τα δεδομένα αÏχεία, sockets, ή συστήματα "
+"αÏχείων.\n"
+"\n"
+" -a,--all εμφάνιση επίσης των μη χÏησιμοποιουμένων αÏχείων \n"
+" -i,--interactive εÏώτηση Ï€Ïιν τον τεÏματισμό (ignored without -"
+"k)\n"
+" -k,--kill τεÏματισμός διεÏγασιών που χÏησιμοποιοÏν το δεδομένο "
+"αÏχείο\n"
+" -l λίστα διαθεσίμων σημάτων\n"
+" -m,--mount οι διεÏγασίες που χÏησιμοποιοÏν τα δεδομένα συστήματα "
+"αÏχείων ή συσκευές μπλοκ\n"
+" -M,--ismountpoint απάντηση μόνο αν ΟÎΟΜΑ αποτελεί σημείο Ï€ÏοσάÏτησης\n"
+" -n,--namespace SPACE αναζήτηση σε αυτήν την ομάδα ονομάτων (file, udp, "
+"ή tcp)\n"
+" -s,--silent σιωπηλή λειτουÏγία\n"
+" -SIGNAL αποστολή Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… σήματος αντί του SIGKILL\n"
+" -u,--user εμφάνιση ID χÏήστη\n"
+" -v,--verbose έξοδος με πολλά λόγια\n"
+" -w,--writeonly τεÏματισμός μόνο των διεÏγασιών με άδεια εγγÏαφής\n"
+" -V,--version εμφάνιση πληÏοφοÏιών έκδοσης\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 αναζήτηση μόνο IPv4 sockets\n"
+" -6,--ipv6 αναζήτηση μόνο IPv6 sockets\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" ονόματα udp/tcp: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2022 Werner Almesberger και Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Αδυναμία ανοίγματος καταλόγου /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "ΑδÏνατη η εκχώÏηση μνήμης στην αντίστοιχη διεÏγασία: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Το όνομα αÏχείου %s δεν υπάÏχει.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "ΑδÏνατον να Ï€ÏοσδιοÏίσω %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Δεν μποÏÏŽ να βÏω την τοπική θÏÏα %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Άγνωστη τοπική θÏÏα AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Δεν μποÏÏŽ να ανοίξω αÏχείο Ï€Ïωτοκόλλου «%s»: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Το όνομα αÏχείου %s δεν αποτελεί σημείο Ï€ÏοσάÏτησης.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: μη έγκυÏη επιλογή %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Η επιλογή του πίνακα ονομάτων απαιτεί ÏŒÏισμα."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Λάθος όνομα"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr ""
+"ΜποÏείτε να χÏησιμοποιήσετε μόνο αÏχεία με την επιλογή σημείου Ï€ÏοσάÏτησης"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Ουδεμία Ï€ÏοδιαγÏαφή διεÏγασίας δόθηκε"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "η επιλογή all δεν μποÏεί να χÏησιμοποιηθεί με την επιλογή silent."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"Δεν μποÏείτε να ψάξετε συγχÏόνως μόνο για sockets IPv4 και μόνο για sockets "
+"IPv6"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s USER PID ACCESS COMMAND\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(άγνωστο)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "ΑδÏνατον να Ï€ÏοσδιοÏίσω το αÏχείο %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Αδυναμία ανοίγματος του /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "ΤεÏματισμός διεÏγασίας %d ? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "ΑδÏνατον να τεÏματίσω τη διεÏγασία %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Δεν μποÏÏŽ να ανοίξω ένα δικτυακό socket.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "ΑδÏνατον να βÏω τον αÏιθμό της συσκευής του socket.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Kill %s(%s%d) ? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Signal %s(%s%d) ? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Δεν μποÏÏŽ να πάÏω UID από την κατάσταση της διεÏγασίας\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Κακή κανονική έκφÏαση: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: παÏάβλεψη μεÏÎ¹ÎºÎ¿Ï Ï„Î±Î¹Ïιάσματος %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "ΤεÏματίστηκε %s(%s%d) με το σήμα %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: δεν βÏέθηκε διεÏγασία\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "ΧÏήση: killall [ΕΠΙΛΟΓΗ]... [--] ΟÎΟΜΑ...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact απαιτεί ακÏιβές ταίÏιασμα για για Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î± ονόματα\n"
+" -I,--ignore-case ταίÏιασμα ανεξαÏτήτως πεζών ή κεφαλαίων\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive εÏώτηση για επιβεβαίωση Ï€Ïιν από killing\n"
+" -l,--list λίστα με όλα τα γνωστά σήματα\n"
+" -q,--quiet χωÏίς εμφάνιση παÏαπόνων\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal ΣΗΜΑ αποστολή Î±Ï…Ï„Î¿Ï ÎµÎ´ÏŽ του σήματος αντί του SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose αναφοÏά αν το σήμα στάλθηκε επιτυχώς\n"
+" -V,--version πληÏοφοÏίες έκδοσης \n"
+" -w,--wait αναμονή για θάνατο διεÏγασίας\n"
+" -n,--ns PID ταίÏιασμα διεÏγασιών που ανήκουν στα ίδια namespaces\n"
+" ως PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP τεÏματίζει μόνο την/τις διεÏγασία(ες) με context\n"
+" (Ï€Ïέπει να Ï€Ïοηγείται των άλλων οÏισμάτων)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Μη έγκυÏο φοÏμά χÏόνου"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Δεν μποÏÏŽ να βÏω το χÏήστη %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Μη έγκυÏο namespace PID"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Κακή κανονική έκφÏαση: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Μέγιστος αÏιθμός ονομάτων είναι %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s lacks process entries (not mounted ?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Σφάλμα κατά την Ï€Ïόσδεση στη διεÏγασία με pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"ΧÏήση: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean καθαÏή 8μπιτη έξοδος.\n"
+" -n, --no-headers δεν εμφανίζει αναγνώσεις/εγγÏαφές from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals <pid>.\n"
+" -d, --duplicates-removed αφαίÏεση διπλών read/writes από την έξοδο.\n"
+" -V, --version εμφανίζει πληÏοφοÏίες έκδοσης.\n"
+" -h, --help εμφανίζει αυτήν εδώ τη βοήθεια.\n"
+"\n"
+" Πάτησε CTRL-C to end output.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"ΧÏήση: prtstat [επιλογές] PID ...\n"
+" prtstat -V\n"
+"Εμφάνιση πληÏοφοÏίας για μια διεÏγασία\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Εμφάνιση πληÏοφοÏιών έκδοσης κι έξοδος\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2022 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2022 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "running"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "sleeping"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "disk sleep"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "traced"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "paging"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "unknown"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"ΧÏόνοι CPU\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Μνήμη\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf in print_stat failed.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "ΔιεÏγασία με pid %d δεν υπάÏχει.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "ΑδÏνατον να αανοίξω το αÏχείο stat του pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Αδυναμία εκχώÏησης για proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Unable to scan stat file"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Μη έγκυÏη επιλογή"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "ΠÏέπει να δώσεις τουλάχιστον ένα PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"/proc δεν είναι Ï€ÏοσαÏτημένο, αδÏνατον να πάÏω τα στατιστικά από το /proc/"
+"self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s είναι άδειο (μή Ï€ÏοσαÏτημένο ;)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"ΧÏήση: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Εμφάνιση δέντÏου διεÏγασιών.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments εμφάνιση οÏισμάτων\n"
+" -A, --ascii χÏήση ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TYPE χÏωματισμός διεÏγασιών by attribute\n"
+" (age)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort ταξινόμηση κατά PID στην έξοδο\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" ταξινόμηση στην έξοδο κατά TYPE\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids εμφάνιση PID, συνεπάγεται -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents εμφάνιση γονικών διεÏγασιών των επιλεγμένων "
+"διεÏγασιών\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names εμφάνιση πλήÏους ονόματος νημάτων\n"
+" -T, --hide-threads απόκÏυψη νημάτων, εμφάνιση μόνο των διεÏγασιών\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version εμφάνιση πληÏοφοÏίας έκδοσης\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" εμφάνιση ιδιοτήτων ασφαλείας\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID εκκίνηση σε αυτό το PID. Η Ï€Ïοεπιλογή είναι 1 (init)\n"
+" USER εμφάνιση μόνο δέντÏων rooted at processes of this user\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "Η μεταβλητή TERM δεν έχει καθοÏιστεί\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Δεν μποÏÏŽ να πάÏω τις ικανότητες τεÏματικοÏ\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "το αÏχείο procfs για %s δεν είναι διαθέσιμο\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Δεν υπάÏχει τέτοιο όνομα χÏήστη: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Η διεÏγασία %d δεν βÏέθηκε.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Δεν βÏέθηκαν διεÏγασίες.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Πάτησε return για κλείσιμο\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: άγνωστο σήμα, %s -l εμφανίζει όλα τα σήματα.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2020 Werner Almesberger και Craig Small\n"
+#~ "\n"
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 0000000..506ca9e
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 0000000..6522f0c
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/eo.gmo b/po/eo.gmo
new file mode 100644
index 0000000..586903a
--- /dev/null
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 0000000..2533869
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,867 @@
+# Esperanto translation.
+# Copyright (C) 2011, 2012, 2014, 2017, 2019, 2021, 2023 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Felipe Castro <fefcas@gmail.com>, 2011, 2012, 2014, 2017, 2019, 2021, 2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.6-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2023-01-08 15:38-0300\n"
+"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
+"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 2.4.2\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Uzmaniero: fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACO]\n"
+" [-k [-i] [-SIGNALO]] NOMO...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Montras kiujn procezojn uzas la nomitajn dosierojn, ingojn,\n"
+"aÅ­ dosiersistemojn.\n"
+"\n"
+" -a,--all montri ankaÅ­ neuzatajn dosierojn\n"
+" -i,--interactive demandi antaÅ­ ol mortigi (ne efika sen -k)\n"
+" -I,--inode ĉiam uzi inode por kompari dosierojn\n"
+" -k,--kill mortigi procezon, kiu aliras la nomitan dosieron\n"
+" -l,--list-signals listigi disponeblajn signalo-nomojn\n"
+" -m,--mount montri ĉiujn procezojn, kiuj uzas la nomitajn\n"
+" dosiersistemojn aÅ­ blok-aparaton\n"
+" -M,--ismountpoint plenumigi peton nur se NOMO estas munt-punkto\n"
+" -n,--namespace SPACO serĉi en tiu ĉi nom-spaco(file, udp, aŭ tcp)\n"
+" -s,--silent silenta funkciado\n"
+" -SIGNALO sendi tiun ĉi signalon anstataŭ SIGKILL\n"
+" -u,--user montri ID de uzantoj\n"
+" -v,--verbose detalema eligo\n"
+" -w,--writeonly mortigi nur la procezojn kun skrib-permeso\n"
+" -V,--version montri informon pri versio\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 serĉi nur ingojn IPv4\n"
+" -6,--ipv6 serĉi nur ingojn IPv6\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" udp/tcp nomoj: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Kopirajto (C) 1993-2022 Werner Almesberger kaj Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc venas kun ABSOLUTE NENIUN GARANTION.\n"
+"Tio ĉi estas libera programaro, kaj vi estas invitata redisdoni Äin sub\n"
+"la kondiĉoj de la Ĝenerala Publika Permesilo GNU.\n"
+"Por pli da informoj pri tiuj ĉi aferoj, vidu la dosierojn nomitajn COPYING "
+"(angle).\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Ne eblas malfermi dosierujon /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Ne eblas rezervi memoron por kongruinta proc: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "La indikita dosiernomo %s ne ekzistas.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Ne eblas apliki stat %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Ne eblas solvi lokan pordon %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Nekonata loka pordo AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Ne eblas malfermi protokolan dosieron \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "La indikita dosiernomo %s ne estas munt-punkto.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Malvalida modifilo %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Nomspaca modifilo postulas unu argumenton."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Malvalida nomo por nomspaco"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Vi nur povas uzi dosierojn kun munt-punktaj modifiloj"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Neniu specifo pri procezo estis donata"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "la modifilo 'all' ne povas esti uzata kun silentiga modifilo."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Vi ne povas serĉi ingojn nur IPv4 kaj nur IPv6 samtempe"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s UZANTO PID ALIRO KOMANDO\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(nekonata)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Ne eblas apliki stat en dosiero %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Ne eblas malfermi /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Ĉu mortigi la procezon %d ? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Ne eblis mortigi la procezon %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Ne eblas malfermi retan ingon.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Ne eblas trovi aparat-numeron de ingo.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Ĉu mortigi %s(%s%d) ? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Ĉu signali %s(%s%d) ? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Ne eblas preni UID el procez-stato\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: MalÄusta regulesprimo: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: preterpasas ne-kompletan kongruon %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Ni mortigis %s(%s%d) per signalo %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: neniu procezo trovite\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Uzmaniero: killall [ELEKTILO]... [--] NOMO...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact postuli Äustan kongruon por tre longaj nomoj\n"
+" -I,--ignore-case sen-uskleca procez-noma kongruo\n"
+" -g,--process-group mortigi procez-grupon anstataŭ procezon\n"
+" -y,--younger-than mortigi procezon pli nova ol TEMPO\n"
+" -o,--older-than mortigi procezon pli malnova ol TEMPO\n"
+" -i,--interactive peti konfirmon antaŭ ol mortigi\n"
+" -l,--list listigi ĉiujn konatajn signal-nomojn\n"
+" -q,--quiet ne printi plendojn\n"
+" -r,--regexp interpreti NOMO kiel etenditan regul-esprimon\n"
+" -s,--signal SIGNALO sendi tiun ĉi signalon anstataŭ SIGTERM\n"
+" -u,--user UZANTO mortigi nur procezo(j)n rulantajn kiel UZANTO\n"
+" -v,--verbose raporti ĉu signalo estis sukcese sendata\n"
+" -V,--version montri informon pri versio\n"
+" -w,--wait atendi ke procezoj mortu\n"
+" -n,--ns PID kongrui al procezoj kiuj apartenas al la samaj\n"
+" nomspacoj ol PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP mortigi nur procezo(j)n kiuj havu kuntekston\n"
+" (devas veni antaŭ aliaj argumentoj)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Malvalida tempo-formo"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Ne eblas trovi la uzanton %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Malvalida PID de nomspaco"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "MalÄusta regul-esprimo: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Maksimuma nombro da nomoj estas %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s malhavas procezajn informojn (ĉu ne muntita ?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Eraro dum konektiÄo al pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Kopirajto (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Uzmaniero: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean eligi 8-bitan purajn fluojn.\n"
+" -n, --no-headers ne montri leg/skribo el kaplinioj fd.\n"
+" -c, --follow rigardeti ankaŭ iun ajn novan idan procezon.\n"
+" -t, --tgid rigardeti ĉiujn fadenojn kies tgid egalas al "
+"<pid>.\n"
+" -d, --duplicates-removed forigi duobligitaj leg/skribojn el la eligo.\n"
+" -V, --version printi information pri versio.\n"
+" -h, --help printi tiun ĉi helpon.\n"
+"\n"
+" Premu CTRL-C por ĉesigi eligon.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Uzmaniero: prtstat [modifiloj] PID ...\n"
+" prtstat -V\n"
+"Printi informon pri procezo\n"
+" -r,--raw Kruda montrigo de informaro\n"
+" -V,--version Montri informon pri versio kaj eligi\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2022 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Kopirajto (C) 2009-2022 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "rulanta"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "dormanta"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "disk-dormado"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombia"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "spursekvata"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "paÄiganta"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "nekonata"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Procezo: %-14s\t\tStato: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tFadenoj: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"ID de Procezo, Grupo kaj Seanco\n"
+" Proceza ID: %d\t\t Patra ID: %d\n"
+" Grupa ID: %d\t\t Seanca ID: %d\n"
+" T Grupa ID: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"PaÄ-Eraroj\n"
+" Tiu ĉi Procezo (malpleja pleja): %8lu %8lu\n"
+" Idaj Procezoj (malpleja pleja): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU-Tempoj\n"
+" Tiu ĉi Procezo (uzanto sistemo gastigo blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Idaj procezoj (uzanto sistemo gastigo): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memoro\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS-Limo: %s\n"
+" Kod-Komenco: %#-10lx\t\t Kod-Fino: %#-10lx\n"
+" Stak-Komenco: %#-10lx\n"
+" Stak-Indikilo (ESP): %#10lx\t Inst-Indikilo (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Planado\n"
+" Strategio: %s\n"
+" 'Nice': %ld \t\t RT Prioritato: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf en print_stat malsukcesis.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Procezo kun pid %d ne ekzistas.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Ne eblas malfermi stat-dosiero por pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Ne eblas rezervi memoron por proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Ne eblas skani stat-dosieron"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Malvalida modifilo"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Vi devas provizi minimume unu PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc ne estas muntita, ni ne povas apliki stat en /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s estas malplena (ĉu ne muntita ?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Uzmaniero: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N tipo ]\n"
+" [ -A | -G | -U ] [ PID | UZANTO ]\n"
+" aÅ­: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Montri arbon el procezoj.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments montri komand-liniajn argumentojn\n"
+" -A, --ascii uzi lini-desegnajn signojn de ASCII\n"
+" -c, --compact-not ne densigi egalajn sub-arbojn\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TIPO kolorigi procezoz laÅ­ atributo\n"
+" (aÄo)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids montri procezajn grup-id; implicas -c\n"
+" -G, --vt100 uzi lini-desegnajn signojn de VT100\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all reliefigi nunajn procezojn kaj ties praulojn\n"
+" -H PID, --highlight-pid=PID\n"
+" reliefigi tiun ĉi procezon kaj ties praulojn\n"
+" -l, --long ne tranĉi longajn liniojn\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort ordigi eligon laŭ PID\n"
+" -N tipo, --ns-sort=TIPO\n"
+" ordigi eligon laŭ tiu ĉi nomspaca tipo\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids montri PID-ojn; implicas -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents montri praulojn de la elektita procezo\n"
+" -S, --ns-changes montri nomspacajn transiÄojn\n"
+" -t, --thread-names montri kompletajn fadenajn nomojn\n"
+" -T, --hide-threads kaÅi fadenojn, montri nur procezojn\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes montri transigojn de uid\n"
+" -U, --unicode uzi UTF-8 (Unikodan) lini-desegnajn signojn\n"
+" -V, --version montri informon pri versio\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" montri sekurecajn atributojn\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID komencas ĉe tiu ĉi PID; apriore estas 1 (init)\n"
+" UZANTO montri nur arbojn kiuj havas radikojn ĉe procezoj de tiu ĉi uzanto\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM ne estas difinita\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Ne eblas koni la kapablojn de la terminalo\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "la dosiero procfs por nomspaco %s ne disponeblas\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Neniu uzant-nomo tia: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Procezo %d ne trovitas.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Neniu procezo trovite.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Premu la enigklavon por fermi\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: nekonata signalo; %s -l listigas la signalojn.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kopirajto (C) 1993-2021 Werner Almesberger kaj Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Uzmaniero: killall [-Z KUNTEKSTO] [-u UZANTO] [ -y TEMPO ] [ -o TEMPO ]\n"
+#~ " [ -eIgiqrvw ][ -s SIGNALO | -SIGNALO ] NOMO...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Uzmaniero: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N tipo ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " aÅ­: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kopirajto (C) 1993-2019 Werner Almesberger kaj Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Uzmaniero: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | UZANTO ]\n"
+#~ " pstree -V\n"
+#~ "Montri arbon de procezoj.\n"
+#~ "\n"
+#~ " -a, --arguments montri komand-liniajn argumentojn\n"
+#~ " -A, --ascii uzi ASCII-ajn lini-desegnajn signojn\n"
+#~ " -c, --compact ne kompaktigi identajn sub-arbojn\n"
+#~ " -h, --highlight-all reliefigi nunajn procezojn kaj ties praulojn\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID reliefigi tiun ĉi procezon kaj ties praulojn\n"
+#~ " -g, --show-pgids montri procez-grupajn id; implicas -c\n"
+#~ " -G, --vt100 uzi VT100-ajn lini-desegnajn signojn\n"
+#~ " -l, --long ne tranĉi longajn liniojn\n"
+#~ " -n, --numeric-sort ordigi eligon laŭ PID\n"
+#~ " -N tipo,\n"
+#~ " --ns-sort=tipo ordigi laÅ­ nomspaca tipo (cgroup, ipc, mnt, net,\n"
+#~ " pid, user, uts)\n"
+#~ " -p, --show-pids montri PID-ojn; implicas -c\n"
+#~ " -s, --show-parents montri praulojn de la elektita procezo\n"
+#~ " -S, --ns-changes montri nomspacajn transiÄojn\n"
+#~ " -t, --thread-names montri kompletajn fadenajn nomojn\n"
+#~ " -T, --hide-threads kaÅi fadenojn, montri nur procezojn\n"
+#~ " -u, --uid-changes montri transigojn de uid\n"
+#~ " -U, --unicode uzi UTF-8 (Unikodan) lini-desegnajn signojn\n"
+#~ " -V, --version montri informon pri versio\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kopirajto (C) 1993-2014 Werner Almesberger kaj Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kopirajto (C) 1993-2012 Werner Almesberger kaj Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uzmaniero: pidof [ -eg ] NOMO...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e postuli Äustan kongruon por tre longaj nomoj;\n"
+#~ " preterpasas se la komand-linio ne disponeblas\n"
+#~ " -g montri procezan grup-ID anstataŭ procezan ID\n"
+#~ " -V montri informon pri versio\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kopirajto (C) 1993-2005 Werner Almesberger kaj Craig Small\n"
+#~ "\n"
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644
index 0000000..c0664fa
--- /dev/null
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..4b89250
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,797 @@
+# Spanish translation for psmisc 23.7-rc1
+# Copyright (C) 2018, 2019, 2022 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Francisco Javier Serrador <fserrador@gmail.com>, 2018.
+# Antonio Ceballos Roa <aceballos@gmail.com>, 2019.
+# Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2022, 2023, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-13 18:25-0600\n"
+"Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\n"
+"Language-Team: Spanish <es@tp.org.es>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Modo de empleo: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n ESPACIO]\n"
+" [-k [-i] [-SEÑAL]] NOMBRE...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Muestra los procesos que utilizan ficheros, sockets o sistemas de ficheros "
+"con\n"
+"nombre.\n"
+"\n"
+" -a,--all muestra también los ficheros no utilizados\n"
+" -i,--interactive pregunta antes de matar (descartada sin -k)\n"
+" -I,--inode utiliza siempre nodos-i para comparar ficheros\n"
+" -k,--kill mata los procesos que acceden al fichero con nombre\n"
+" -l,--list-signals enumera los nombres de señales disponibles\n"
+" -m,--mount muestra todos los procesos que utilizan sistemas de\n"
+" ficheros con nombre o dispositivos de bloque\n"
+" -M,--ismountpoint satisface petición solamente si NOMBRE es un punto "
+"de\n"
+" montaje\n"
+" -n,--namespace ESPACIO\n"
+" busca en este espacio de nombres (fichero, udp o "
+"tcp)\n"
+" -s,--silent operación silenciosa\n"
+" -SEÑAL envía esta señal en lugar de SIGKILL\n"
+" -u,--user muestra los IDs de usuario\n"
+" -v,--verbose salida detallada\n"
+" -w,--writeonly solo mata procesos con acceso de escritura\n"
+" -V,--version muestra información sobre la versión\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 solo busca sockets IPv4\n"
+" -6,--ipv6 solo busca sockets IPv6\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" nombres udp/tcp: [puerto_local][,[host_remoto][,[puerto_remoto]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2024 Werner Almesberger y Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc viene sin ABSOLUTAMENTE NINGUNA GARANTÃA.\n"
+"Esto es software libre y está usted invitado a redistribuirlo bajo\n"
+"los términos de la GNU General Public License.\n"
+"Para más información sobre estos asuntos, véanse los ficheros llamados "
+"COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "No se puede abrir el directorio /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "No se puede asignar memoria para el proceso coincidente: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "El nombre de fichero especificado %s no existe.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "No se pueden obtener estadísticas de %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "No se puede resolver el puerto local %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Puerto local AF desconocido %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "No se puede abrir el fichero de protocolo «%s»: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "El nombre de fichero especificado %s no es un punto de montaje.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Opción no válida: %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "La opción de espacio de nombres requiere argumento."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Nombre no válido de espacio de nombres"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Solo se pueden utilizar ficheros con opciones de punto de montaje"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "No se ha dado ninguna especificación de proceso"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "la opción --all no se puede utilizar con la opción --silent."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"No se pueden buscar sockets solo de tipo IPv4 y solo de tipo IPv6 al mismo "
+"tiempo"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s USUARIO PID ACCESO ORDEN\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(desconocido)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "No se pueden obtener estadísticas del fichero %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "No se puede abrir /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "¿Matar el proceso %d? (s/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "No se ha podido matar el proceso %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "No se puede abrir un socket de red.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "No se puede encontrar el número de dispositivo del socket.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "¿Matar %s(%s%d)? (s/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "¿Señal %s(%s%d)? (s/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: No se puede obtener el UID a partir del estado del proceso\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Expresión regular mal formada: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: omitiendo coincidencia parcial %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Matado %s(%s%d) con la señal %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: ningún proceso encontrado\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Modo de empleo: killall [OPCIÓN]... [--] NOMBRE...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact requiere coincidencia exacta para nombres muy largos\n"
+" -I,--ignore-case MAYÚS/minux indistinguibles para coincidencia de "
+"nombre\n"
+" del proceso\n"
+" -g,--process-group mata grupo de procesos de vez de proceso\n"
+" -y,--younger-than mata procesos más recientes que HORA\n"
+" -o,--older-than mata procesos más antiguos que HORA\n"
+" -i,--interactive pide confirmación antes de matar\n"
+" -l,--list lista todos los nombres de señales conocidas\n"
+" -q,--quiet no escribe quejas\n"
+" -r,--regexp interpreta NOMBRE como una expreg extendida\n"
+" -s,--signal SEÑAL envía esta señal en vez de SIGTERM\n"
+" -u,--user USUARIO mata solo proceso(s) ejecutándose como USUARIO\n"
+" -v,--verbose informa si la señal se ha enviado correctamente\n"
+" -V,--version muestra información sobre la versión\n"
+" -w,--wait espera a que los procesos mueran\n"
+" -n,--ns PID coincidencia con procesos que pertenecen al mismo\n"
+" espacio de nombres que PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context EXPREG mata solo proceso(s) que tienen contexto\n"
+" (debe preceder a otros argumentos)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Formato de hora no válido"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "No se puede encontrar al usuario %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Espacio de nombres PID no válido"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Expresión regular mal formada: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: El número máximo de nombres es %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s carece de entradas de procesos (¿no montado?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Error adjuntando a pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"© 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean saca flujos limpios de 8 bits.\n"
+" -n, --no-headers no muestra lectura/escritura desde "
+"cabeceras fd.\n"
+" -c, --follow echa un vistazo también a cualquier nuevo\n"
+" proceso hijo.\n"
+" -t, --tgid echa un vistazo también a todos los hilos "
+"en\n"
+" los que tgid es igual a <pid>.\n"
+" -d, --duplicates-removed quita lecturas/escrituras duplicadas de la\n"
+" salida.\n"
+" -V, --version imprime información sobre la versión.\n"
+" -h, --help imprime este texto de ayuda.\n"
+"\n"
+" Pulse CTRL-C para finalizar la salida.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Modo de empleo: prtstat [opciones] PID ...\n"
+" prtstat -V\n"
+"Escribe información relativa a un proceso\n"
+" -r,--raw Pantalla cruda de información\n"
+" -V,--version Muestra información sobre la versión y finaliza\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "ejecutando"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "durmiendo"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "disco en espera"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "trazado"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "paginando"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "desconocido"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Proceso: %-14s\t\tEstado: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tHilos: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Proceso, IDs de grupo y sesión\n"
+" ID Proceso: %d\t\t ID Padre: %d\n"
+" ID grupo: %d\t\t ID Sesión: %d\n"
+" ID Grupo T: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Errores de página\n"
+" Este proceso (menor mayor): %8lu %8lu\n"
+" Procesos hijos (menor mayor): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Tiempos de CPU\n"
+" Este proceso (usuario sistema invitado blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Procesos hijos (usuario sistema invitado): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memoria\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS límite: %s\n"
+" Código inicio: %#-10lx\t\t Código detención: %#-10lx\n"
+" Pila inicio: %#-10lx\n"
+" Pila puntero (ESP): %#10lx\t Inst puntero (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Planificación\n"
+" Política: %s\n"
+" Cortesía: %ld\t\t Prioridad RT: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "fallo de asprintf en print_stat.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "El proceso con pid %d no existe.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "No se puede abrir el fichero de estadísticas para el pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "No se puede reservar memoria para proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "No se puede examinar el fichero de estadísticas"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Opción no válida"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Se debe proporcionar al menos un PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"/proc no está montado, no se pueden obtener estadísticas de /proc/self/"
+"stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s está vacío (¿ no montado ?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Modo de empleo: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N tipo ]\n"
+" [ -A | -G | -U ] [ PID | USUARIO ]\n"
+" o: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Muestra un árbol de procesos\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments muestra los argumentos de la línea de órdenes\n"
+" -A, --ascii utiliza characteres de trazado de líneas ASCII\n"
+" -c, --compact-not no compacta subárboles idénticos\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TIPO colorea proceso por atributo\n"
+" (edad)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids muestra ids de grupos de procesos; implica -c\n"
+" -G, --vt100 utiliza caracteres de trazzdo de líneas VT100\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all resalta el proceso actual y sus ascendientes\n"
+" -H PID, --highlight-pid=PID\n"
+" resalta este proceso y sus ascendientes\n"
+" -l, --long no trunca las líneas largas\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort ordena la salida por PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" ordena la salida por este tipo de espacio de nombres\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids muestra PIDs; implica -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents muestra los padres del proceso seleccionado\n"
+" -S, --ns-changes muestra las transiciones de espacios de nombres\n"
+" -t, --thread-names muestra los nombres completos de hilos\n"
+" -T, --hide-threads oculta hilos, muestra solo procesos\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes muestra transiciones de uid\n"
+" -U, --unicode utiliza caracteres de trazado de líneas UTF-8 "
+"(Unicode)\n"
+" -V, --version muestra información sobre la versión\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" muestra los atributos de seguridad\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID inicia en este PID; predeterminado es 1 (init)\n"
+" USUARIO muestra solo árboles con raíz en los procesos de este usuario\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM no está establecido\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "No se pueden obtener las capacidades del terminal\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "fichero procfs no disponible para el espacio de nombres %s\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "No existe ese nombre de usuario: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "No se encontró el proceso %d.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Ningún proceso encontrado.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Pulse «enter» para cerrar\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: señal desconocida; %s -l enumera las señales.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger y Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Modo de empleo: killall [ -Z CONTEXTO ] [ -u USUARIO ] [ -y HORA ] [ -o "
+#~ "HORA ]\n"
+#~ " [ -eIgiqrvw ] [ -s SEÑAL | -SEÑAL ] NOMBRE...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Modo de empleo: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N tipo ]\n"
+#~ " [ -A | -G | -U ] [ PID | USUARIO ]\n"
+#~ " o: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger y Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "© 1993-2014 Werner Almesberger y Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2009 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "© 1993-2009 Werner Almesberger y Craig Small\n"
+#~ "\n"
diff --git a/po/eu.gmo b/po/eu.gmo
new file mode 100644
index 0000000..f513bb9
--- /dev/null
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 0000000..afe0eab
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,1002 @@
+# Basque translation of psmisc.
+# Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Mikel Olasagasti Uranga <hey_neken@mundurat.net>, 2004, 2005, 2009, 2010.
+# , fuzzy
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 22.11-pre1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2010-03-29 10:09+0100\n"
+"Last-Translator: Mikel Olasagasti <hey_neken@mundurat.net>\n"
+"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: src/fuser.c:146
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: fuser [-fMuv] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] "
+#| "NAME...\n"
+#| " fuser -l\n"
+#| " fuser -V\n"
+#| "Show which processes use the named files, sockets, or filesystems.\n"
+#| "\n"
+#| " -a,--all display unused files too\n"
+#| " -i,--interactive ask before killing (ignored without -k)\n"
+#| " -k,--kill kill processes accessing the named file\n"
+#| " -l,--list-signals list available signal names\n"
+#| " -m,--mount show all processes using the named filesystems or "
+#| "block device\n"
+#| " -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+#| " -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+#| " -s,--silent silent operation\n"
+#| " -SIGNAL send this signal instead of SIGKILL\n"
+#| " -u,--user display user IDs\n"
+#| " -v,--verbose verbose output\n"
+#| " -V,--version display version information\n"
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Erabilerera: fuser [-fMuv] [-a|-s] [-4|-6] [-c|-m|-n EREMUA] [-k[-i] [-"
+"SEINALEA]] IZENA...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Bistaratu zein prozesuk erabiltzen dituzten izendatutako fitxategi, socket "
+"edo fitxategi-sistemak.\n"
+"\n"
+" -a,--all erakutsi erabiligabeko fitxategiak ere\n"
+" -i,--interactive galdetu hil baina lehenago (ignoratua -k gabe)\n"
+" -k,--kill hil fitxategi hori erabiltzen hari diren prozesuak\n"
+" -l,--list-signals zerrendatu eskuragarri dauden seinale izenak\n"
+" -m,--mount bistaratu izendatutako fitxategi sistema edo bloke "
+"gailua erabiltzen duten prozesu guztiak\n"
+" -M,--ismountpoint IZENA muntai puntua denean bakarrik burutu eskaera\n"
+" -n,--namespace EREMUAK bilatu eremu hauteko batean (fitxategia, udp, "
+"edo tcp)\n"
+" -s,--silent operazio ixila\n"
+" -SEINALEA bidali seinalea SIGKILL beharrean\n"
+" -u,--user erakutsi erabiltzaileen id-ak\n"
+" -v,--verbose irteera xehetua\n"
+" -V,--version erakutsi bertsio informazioa\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 bilatu IPv4 socket-ak bakarrik\n"
+" -6,--ipv6 bilatu IPv6 socket-ak bakarrik\n"
+
+#: src/fuser.c:170
+#, fuzzy, c-format
+#| msgid ""
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" - garbitu aukerak\n"
+"\n"
+" udp/tcp izenak: [ataka_lokala][,[urruneko_ostalaria][,[urruneko_ataka]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2010 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2010 Werner Almesberger eta Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc-k ez du INONGO BERMERIK.\n"
+"Software librea da, eta berriro bana daiteke GNU Lizentzia Publiko "
+"Orokorrak\n"
+"ezarritako baldintzak betez.\n"
+"Gai honi buruzko informazio gehiagorako, ikusi COPYING izena duten "
+"fitxategiak.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Ezin da /proc direktorioa ireki: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Ezin da memoria esleitu aurkitutako prozesuarentzat: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Adierazitako %s fitxategia ez da existitzen.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Ezin da %s identifikatu: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Ezin da %s ataka lokala ebatzi: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "AF ataka lokal ezezaguna %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Ezin izan da \"%s\" protokolo fitxategia ireki: %s\n"
+
+#: src/fuser.c:1079
+#, fuzzy, c-format
+#| msgid "Specified filename %s does not exist.\n"
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Adierazitako %s fitxategia ez da existitzen.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: %s baliogabeko aukera\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Namespace aukerak argumentua behar du"
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Baliogabeko namespace izena"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "muntai-puntu aukerak dituzten fitxategiak erabil ditzazkezu soilik"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Ez da prozesuaren espezifikaziorik eman"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "aukera guztiak ezin dira ixiltasun aukerarekin erabili."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"Ezin dituzu IPv4 socket-ak soilik eta IPv6 socket-ak soilik bilatu une berean"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s ERAB. PID SARRERA KOMANDOA\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(ezezaguna)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Ezin da %s fitxategia identifikatu: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Ezin da /proc/net/unix direktorioa ireki: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "%d prozesua hil? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Ezin izan da %d prozesua hil: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Ezin da sare socket bat ireki.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Ezin izan da socket-aren gailu zenbakia aurkitu.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "%s(%s%d) hil? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Seinala bidali %s(%s%d)? (b/E) "
+
+#: src/killall.c:262
+#, fuzzy, c-format
+#| msgid "Cannot get UID from process status\n"
+msgid "killall: Cannot get UID from process status\n"
+msgstr "Ezin da UID-a lortu prozesuaren egoeragatik\n"
+
+#: src/killall.c:368
+#, fuzzy, c-format
+#| msgid "Bad regular expression: %s\n"
+msgid "killall: Bad regular expression: %s\n"
+msgstr "Expresio erregular okerra: %s\n"
+
+#: src/killall.c:525
+#, fuzzy, c-format
+#| msgid "skipping partial match %s(%d)\n"
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "baterakuntza partziala saltatzen %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d) hil da %d seinalearekin\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: ez da prozesurik aurkitu\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "erabilera: killall [AUKERAK ] [ -- ] IZENA...\n"
+
+#: src/killall.c:839
+#, fuzzy, c-format
+#| msgid ""
+#| " killall -l, --list\n"
+#| " killall -V, --version\n"
+#| "\n"
+#| " -e,--exact require exact match for very long names\n"
+#| " -I,--ignore-case case insensitive process name match\n"
+#| " -g,--process-group kill process group instead of process\n"
+#| " -y,--younger-than kill processes younger than TIME\n"
+#| " -o,--older-than kill processes older than TIME\n"
+#| " -i,--interactive ask for confirmation before killing\n"
+#| " -l,--list list all known signal names\n"
+#| " -q,--quiet don't print complaints\n"
+#| " -r,--regexp interpret NAME as an extended regular expression\n"
+#| " -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+#| " -u,--user USER kill only process(es) running as USER\n"
+#| " -v,--verbose report if the signal was successfully sent\n"
+#| " -V,--version display version information\n"
+#| " -w,--wait wait for processes to die\n"
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V --version\n"
+"\n"
+" -e,--exact izen oso luzeentzat berdin-berdin idaztea behar da\n"
+" -I,--ignore-case ez ezberdindu letra maiskula/minuskulak\n"
+" -g,--process-group hil prozesu taldea prozesuaren ordez\n"
+" -y,--younger-than ORDUA baina berriagoak diren prozesuak hil\n"
+" -o, --older-than ORDUA baina zaharragoak diren prozesuak hil\n"
+" -i,--interactive konfirmazioa eskatu hil aurretik\n"
+" -l,--list zerrendatu seinale ezagun guztien izenak\n"
+" -q,--quiet ez erakutsi kexuak\n"
+" -r, --regexp interpretatu IZENA luzatutako expresio erregular bat "
+"bezala\n"
+" -s,--signal SEINALEA bidali seinalea SIGTERM-ren ordez\n"
+" -u, --user ERABILTZAILEA hil ERABILTZAILEA bezela exekutatzen hari "
+"diren prozesuak\n"
+" -v,--verbose informatu seinalea arrakasterekin bidali bada\n"
+" -V,--version bertsioaren informazioa bistaratu\n"
+" -w,--wait itxaron prozesuak hil arte\n"
+"\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP hil kontestua duten prozesuak bakarrikkill only "
+"process(es)\n"
+" (beste argumentu batzuk aurretik izan behar ditu)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Baliogabeko ordu formatua"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Ezin da %s erabiltzailea aurkitu\n"
+
+#: src/killall.c:1016
+#, fuzzy
+#| msgid "Invalid namespace name"
+msgid "Invalid namespace PID"
+msgstr "Baliogabeko namespace izena"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Expresio erregular okerra: %s\n"
+
+#: src/killall.c:1057
+#, fuzzy, c-format
+#| msgid "Maximum number of names is %d\n"
+msgid "killall: Maximum number of names is %d\n"
+msgstr "Izen kopuru gehiengoa %d da\n"
+
+#: src/killall.c:1062
+#, fuzzy, c-format
+#| msgid "%s is empty (not mounted ?)\n"
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "%s hutsik dago (muntatu gabea?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Errorea %i prozesura atxikitzen\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+#| " -8 output 8 bit clean streams.\n"
+#| " -n don't display read/write from fd headers.\n"
+#| " -c peek at any new child processes too.\n"
+#| " -d remove duplicate read/writes from the output.\n"
+#| " -V prints version info.\n"
+#| " -h prints this help.\n"
+#| "\n"
+#| " Press CTRL-C to end output.\n"
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Erabilera: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8 8 bit-eko irteera jario garbiak.\n"
+" -n ez bistaratu fd goiburuen irakurketa/idazketak.\n"
+" -c seme-prozesu berriak ere begiratu.\n"
+" -d ezabatu irteerako irakurketa/idazketa bikoiztuak.\n"
+" -V bistaratu bertsioaren informazioa.\n"
+" -h laguntza hau bistaratu.\n"
+"\n"
+" Sakatu CTR-C amaitzeko.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Erabilera: prtstat [aukerak] PID ...\n"
+" prtstat -V\n"
+"Prozesu baten informazioa bistaratu\n"
+" -r,--raw Informazioa gordinik bistaratu\n"
+" -V,--version Erakutsi bertsio informazioa eta irten\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "aktibo"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "lotan"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "lotan (diska)"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "trazeatuta"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "orrikatzen"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "ezezaguna"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Prozesua: %-14s\t\tEgoera: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tHariak: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Prozesua, taldea eta saio IDak\n"
+" Prozesu IDa: %d\t\t Aita IDa: %d\n"
+" Talde IDa: %d\t\t Saio IDa: %d\n"
+" T Talde IDa: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Orrikatze hutsegiteak\n"
+" Prozesu hau (minor major): %8lu %8lu\n"
+" Seme prozesuak (minor major): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU denborak\n"
+" Prozesu hau (erabiltzailea sistema gonbidatua blkio): %6.2f %6.2f %6.2f "
+"%6.2f\n"
+" Seme prozesuak (erabiltzailea sistema gonbidatua): %6.2f %6.2f "
+"%6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memoria\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limitea: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Antolaketa\n"
+" Politika: %s\n"
+" Nice: %ld \t\t RT Prioritatea: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf-ek print_stat-en huts egin du.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "%d pid-a duen prozesua ez da existitzen.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Ezin da stat fitxategia ireki %d (%s) pid-erako\n"
+
+#: src/prtstat.c:243
+#, fuzzy, c-format
+#| msgid "Cannot allocate memory for matched proc: %s\n"
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Ezin da memoria esleitu aurkitutako prozesuarentzat: %s\n"
+
+#: src/prtstat.c:283
+#, fuzzy, c-format
+#| msgid "Unable to open stat file for pid %d (%s)\n"
+msgid "Unable to scan stat file"
+msgstr "Ezin da stat fitxategia ireki %d (%s) pid-erako\n"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Baliogabeko aukera"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Gutxienez PID bat eman behar duzu"
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"/proc ez dago muntatua, ezin da stat egin /proc/self/stat fitxategian.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s hutsik dago (muntatu gabea?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+
+#: src/pstree.c:1326
+#, fuzzy, c-format
+#| msgid ""
+#| " PID start at this PID; default is 1 (init)\n"
+#| " USER show only trees rooted at processes of this user\n"
+#| "\n"
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+" PID zein PID-etan hasi, lehenetsia 1 (init)\n"
+" ERABILTZAILEA erakutsi erabiltzaile honen zuahitz prozesuen adarrak\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM ez dago ezarrita\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Ezin dira terminalaren gaitasunak lortu\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr ""
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Ez dago honelako erabiltzaile izenik: %s\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+#| msgid "No processes found.\n"
+msgid "Process %d not found.\n"
+msgstr "Ez da prozesurik aurkitu.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Ez da prozesurik aurkitu.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Sakatu 'return' itxitzeko\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: seinale ezezaguna; %s -l seinaleak zerrendatu.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: pidof [ -eg ] IZENA ...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e izen oso luzeentzat berdin-berdin idaztea behar da;\n"
+#~ " jauzi komandoa-lerroa eskuragarri ez badago\n"
+#~ " -g erakutsi prozesu taldearen IDa prozesuearenaren ordez\n"
+#~ " -V bertsioaren informazioa bistaratu\n"
+#~ "\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Erabilera: killall [-Z KONTESTUA] [-u ERABILTZAILEA] [ -egiqvw ] [ -"
+#~ "SEINALEA ] IZENA ...\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger eta Craig Small\n"
+#~ "\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -u ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Erabilera: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -"
+#~ "u ]\n"
+#~ " [ -A | -G | -U ] [ PID | ERABILTZAILEA]\n"
+#~ " pstree -V\n"
+#~ "Bistaratu prozesu zuhaitz bat.\n"
+#~ "\n"
+#~ " -a, --arguments erakutsi komando lerroaren argumentoak\n"
+#~ " -A, --ascii erabili ASCII karaktereak\n"
+#~ " -c, --compact ez trinkotu azpi-zuhaitz berdinak\n"
+#~ " -h, --highlight-all nabarmentu uneko prozesuak eta honen aurrekoak\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID nabarmendu \"pid\" prozesua eta honen aurrekoak\n"
+#~ " -G, --vt100 erabili VT100 karaktereak\n"
+#~ " -l, --long ez moztu lerro luzeak\n"
+#~ " -n, --numeric-sort sailkatu irteera PIDaren arabera PID\n"
+#~ " -p, --show-pids erakutsi PIDak; -c erabiltzea esan nahi du\n"
+#~ " -u, --uid-changes erakutsi uid transizioak\n"
+#~ " -U, --unicode erabili UTF-8 (Unicode) lerro marrazketa "
+#~ "karaktereak\n"
+#~ " -V, --version erakutsi bertsio informazioa\n"
+
+#, c-format
+#~ msgid " -Z show SELinux security contexts\n"
+#~ msgstr " -Z SELinux segurtasun kontestuak bistaratu\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2009 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2009 Werner Almesberger and Craig Small\n"
+#~ "\n"
+
+#~ msgid "You cannot use the mounted and mountpoint flags together"
+#~ msgstr "Ezin duzu muntai eta muntai puntu banderak batera erabili"
+
+#~ msgid "Cannot stat mount point %s: %s\n"
+#~ msgstr "Ezin da %s muntai puntua identifikatu: %s\n"
+
+#~ msgid "Cannot open /etc/mtab: %s\n"
+#~ msgstr "Ezin da /etc/mtab ireki: %s\n"
+
+#~ msgid "MAX_DEPTH not big enough.\n"
+#~ msgstr "MAX_DEPTH ez da behar bezain handia\n"
+
+#~ msgid "%s: SID (%s) must be numeric\n"
+#~ msgstr "%s: SIDak (%s) zenbakia izan behar du\n"
+
+#~ msgid "-4 flag used but proc file %s is not readable\n"
+#~ msgstr ""
+#~ "-4 bandera erabili da, baina %s proc fitxategia ez da irakurgarria\n"
+
+#~ msgid "-6 flag used but proc file %s is not readable\n"
+#~ msgstr ""
+#~ "-6 bandera erabili da, baina %s proc fitxategia ez da irakurgarria\n"
+
+#~ msgid "kill %d"
+#~ msgstr "%d hil"
+
+#~ msgid "No automatic removal. Please use umount %s\n"
+#~ msgstr "Ezin da automatikoki kendu. Mesedez erabili umount %s\n"
+
+#~ msgid "No automatic removal. Please use swapoff %s\n"
+#~ msgstr "Ezin da automatikoki kendu. Mesedez erabili swapoff %s\n"
+
+#~ msgid "Internal error (type %d)\n"
+#~ msgstr "barne-errorea (%d moeta)\n"
+
+#~ msgid "kernel mount "
+#~ msgstr "kernel mount "
+
+#~ msgid "kernel loop "
+#~ msgstr "kernel loop "
+
+#~ msgid "kernel swap "
+#~ msgstr "kernel swap "
+
+#~ msgid "ignoring -m in name space \"%s\"\n"
+#~ msgstr "-m ignoratzen \"%s\" izen tartean\n"
+
+#~ msgid ""
+#~ "usage: pstree [ -a ] [ -c ] [ -h | -H pid ] [ -l ] [ -n ] [ -p ] [ -u ]\n"
+#~ msgstr ""
+#~ "erabilera: pstree [ -a ] [ -c ] [ -h | -H pid ] [ -l ] [ -n ] [ -p ] [ -"
+#~ "u ]\n"
+
+#~ msgid " [ -A | -G | -U ] [ pid | user]\n"
+#~ msgstr " [ -A | -G | -U ] [ pid | erabiltzailea]\n"
+
+#~ msgid ""
+#~ " pstree -V\n"
+#~ "\n"
+#~ msgstr ""
+#~ " pstree -V\n"
+#~ "\n"
+
+#~ msgid " -a show command line arguments\n"
+#~ msgstr " -a erakutsi komando lerro argumentoak\n"
+
+#~ msgid " -A use ASCII line drawing characters\n"
+#~ msgstr " -A erabili ASCII karaktereak lerroak marrazteko\n"
+
+#~ msgid " -c don't compact identical subtrees\n"
+#~ msgstr " -c ez trinkotu azpi-zuahitz berdinak\n"
+
+#~ msgid " -h highlight current process and its ancestors\n"
+#~ msgstr " -h nabarmendu uneko prozesuak eta honen aurrekoak\n"
+
+#~ msgid " -H pid highlight process \"pid\" and its ancestors\n"
+#~ msgstr " -H pid nabarmendu \"pid\" prozesua eta honen aurrekoak\n"
+
+#~ msgid " -G use VT100 line drawing characters\n"
+#~ msgstr " -G erabili VT100 karaktereak lerroak marrazteko\n"
+
+#~ msgid " -l don't truncate long lines\n"
+#~ msgstr " -l ez moztu lerro luzeak\n"
+
+#~ msgid " -n sort output by PID\n"
+#~ msgstr " -n sailkatu irteera PIDaren arabera\n"
+
+#~ msgid " -p show PIDs; implies -c\n"
+#~ msgstr " -p erakutsi PIDak; -c erabiltzea suposatzen du\n"
+
+#~ msgid " -u show uid transitions\n"
+#~ msgstr " -u erakutsi uid trantsizioak\n"
+
+#~ msgid " -s show Flask SIDs\n"
+#~ msgstr " -s erakutsi SIDs flaskoak\n"
+
+#~ msgid " -U use UTF-8 (Unicode)) line drawing characters\n"
+#~ msgstr " -U erabili UTF-8 (Unicode)) lerro karaktereak marrazteko\n"
+
+#~ msgid " -V display version information\n"
+#~ msgstr " -V bertsioari buruzko informazioa pantailaratu\n"
+
+#~ msgid " pid start at pid, default 1 (init))\n"
+#~ msgstr " pid hasi pid hontan, lehenetsitakoa 1 (init))\n"
+
+#~ msgid ""
+#~ " user show only trees rooted at processes of that user\n"
+#~ "\n"
+#~ msgstr ""
+#~ " user erakutsi erabiltzaile honen prozesuen zuahitzak\n"
+#~ "\n"
+
+#~ msgid "pstree comes with ABSOLUTELY NO WARRANTY.\n"
+#~ msgstr "pstree-k ez du INONGO BERMERIK.\n"
+
+#~ msgid ""
+#~ "This is free software, and you are welcome to redistribute it under the "
+#~ "terms\n"
+#~ msgstr ""
+#~ "Software librea da, eta berriro bana daiteke GNU Lizentzia Publiko "
+#~ "Orokorrak\n"
+#~ "ezarritako baldintzak betez.\n"
+
+#~ msgid "of the GNU General Public License.\n"
+#~ msgstr "GNU General Public License lizentziapean.\n"
+
+#~ msgid ""
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr ""
+#~ "Gai honi buruzko informazio gehiagorako, ikusi COPYING izena duten "
+#~ "fitxategiak.\n"
diff --git a/po/fi.gmo b/po/fi.gmo
new file mode 100644
index 0000000..0f3b834
--- /dev/null
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..43af6e6
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,1012 @@
+# Finnish translation for psmisc.
+# Copyright © 2010, 2012, 2013, 2014, 2016 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Lars Wirzenius <liw@iki.fi>, 2004.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2008-2010, 2012-2014, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.0-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2016-12-17 12:32+0200\n"
+"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Finnish\n"
+"X-Poedit-Country: FINLAND\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Käyttö: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NIMI...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Näytä mitkä prosessit käyttävät nimettyjä tiedostoja, vastakkeita tai\n"
+"tiedostojärjestelmiä.\n"
+"\n"
+" -a,--all näytä myös käyttämättömät tiedostot\n"
+" -i,--interactive kysy ennen kill-komennon käyttämistä (ei merkitystä\n"
+" ilman valitsinta -k)\n"
+" -I,--inode käytä tiedostojen vertailussa aina inodes-solmuja\n"
+" -k,--kill lähetä signaali kill-käskyllä prosesseille, jotka\n"
+" käyttävät tiedostoa\n"
+" -l,--list-signals näytä signaalinimien luettelo\n"
+" -m,--mount näytä kaikki nimettyjä tiedostojärjestelmiä tai\n"
+" lohkolaitteita käyttävät prosessit\n"
+" -M,--ismountpoint toteuta pyyntö vain jos NIMI on liitäntäpiste\n"
+" -n,--namespace SPACE etsi tästä SPACE-nimiavaruudesta (file, udp, tai "
+"tcp)\n"
+" -s,--silent vaimennettu toiminta\n"
+" -SIGNAL lähetä muu signaali kuin SIGKILL\n"
+" -u,--user näytä käyttäjätunnukset\n"
+" -v,--verbose laveasti\n"
+" -w,--writeonly käytä kill-käskyä vain kirjoitusoikeudella\n"
+" varustettuihin prosesseihin\n"
+" -V,--version näytä versiotiedot\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 etsi vain IPv4-vastakkeita\n"
+" -6,--ipv6 etsi vain IPv6-vastakkeita\n"
+
+#: src/fuser.c:170
+#, fuzzy, c-format
+#| msgid ""
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" - nollaa valitsimet\n"
+"\n"
+" â€udp/tcpâ€-nimet: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 1993-2014 Werner Almesberger ja Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc-ohjelmistolla EI EHDOTTOMASTI OLE MITÄÄN TAKUUTA.\n"
+"Tämä on vapaa ohjelmisto ja saat kopioida ja levittää sitä GNU General "
+"Public\n"
+"License -lisenssin mukaisesti. Tiedostossa COPYING on tarkemmat tiedot.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Hakemiston /proc avaaminen epäonnistui: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Muistin varaaminen täsmäävälle proc-hakemistolle epäonnistui: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Määriteltyä tiedostonimeä %s ei ole olemassa.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Komennon stat %s suorittaminen epäonnistui: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Paikallisen portin %s selvittäminen epäonnistui: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Tuntematon paikallinen portti AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Yhteyskäytäntötiedoston â€%s†avaaminen epäonnistui: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Määritelty tiedostonimi %s ei ole liitäntäpiste.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Virheellinen valitsin %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Nimiavaruusvalitsin vaatii argumentin."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Virheellinen nimiavaruusnimi"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Voit käyttää tiedostoja vain â€mountpointâ€-valitsimien kanssa"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Prosessimäärittelyä ei ole annettu"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "â€allâ€-valitsinta ei voi käyttää â€silentâ€-valitsimen kanssa."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"Vain IPv4- ja vain IPv6-vastakkeiden etsiminen samaan aikaan epäonnistui"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s KÄYTTÄJÄ PID ACCESS KÄSKY\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(tuntematon)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Stat-komennon suorittaminen tiedostolle %s epäonnistui: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Tiedoston /proc/net/unix avaaminen epäonnistui: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr ""
+"Lähetä signaali prosessille %d? (y=kyllä, N=ei, â€kyllä†yleensä lopettaa "
+"prosessin) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Kill-komennon lähettäminen prosessille %d epäonnistui: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Verkkovastakkeen avaaminen epäonnistui.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Vastakkeen laitenumeroa ei löydy.\n"
+
+# Kill-käskyn käyttämä signaali on tässä SIGTERM (tunnetaan myös nimellä TERM).
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Lopeta prosessi %s(%s%d)? (y=kyllä, N=ei) "
+
+# Signaali on joku muu kuin SIGTERM
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr ""
+"Signaali prosessille %s(%s%d)? (y=kyllä, N=ei, â€kyllä†yleensä lopettaa "
+"prosessin) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: UID-käyttäjätunnisteen saaminen prosessitilasta epäonnistui\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Virheellinen säännöllinen lauseke: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: ohitetaan osittain vastaava %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Prosessille %s(%s%d) lähetetty signaali %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: ei prosesseja\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Käyttö: killall [VALITSIN]... [--] NIMI...\n"
+
+#: src/killall.c:839
+#, fuzzy, c-format
+#| msgid ""
+#| " killall -l, --list\n"
+#| " killall -V, --version\n"
+#| "\n"
+#| " -e,--exact require exact match for very long names\n"
+#| " -I,--ignore-case case insensitive process name match\n"
+#| " -g,--process-group kill process group instead of process\n"
+#| " -y,--younger-than kill processes younger than TIME\n"
+#| " -o,--older-than kill processes older than TIME\n"
+#| " -i,--interactive ask for confirmation before killing\n"
+#| " -l,--list list all known signal names\n"
+#| " -q,--quiet don't print complaints\n"
+#| " -r,--regexp interpret NAME as an extended regular expression\n"
+#| " -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+#| " -u,--user USER kill only process(es) running as USER\n"
+#| " -v,--verbose report if the signal was successfully sent\n"
+#| " -V,--version display version information\n"
+#| " -w,--wait wait for processes to die\n"
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact vaatii täsmällisen vastaavuuden hyvin pitkille "
+"nimille\n"
+" -I,--ignore-case merkkikoosta riippumaton prosessinimi täsmää\n"
+" -g,--process-group lähetä signaali kill-käskyllä prosessiryhmälle\n"
+" prosessin sijasta\n"
+" -y,--younger-than tapa prosessit, jotka ovat nuorempia kuin TIME\n"
+" -o,--older-than tapa prosessit, jotka ovat vanhempia kuin TIME\n"
+" -i,--interactive kysy vahvistusta ennen kill-käskyä\n"
+" -l,--list luettele kaikki tunnetut signaalinimet\n"
+" -q,--quiet älä tulosta valituksia\n"
+" -r,--regexp tulkitse NIMI laajennettuna säännöllisenä "
+"lausekkeena\n"
+" -s,--signal SIGNAALI lähetä tämä SIGNAALI eikä SIGTERM\n"
+" -u,--user KÄYTTÄJÄ lähetä signaali kill-käskyllä vain prosesseille, "
+"joita\n"
+" suoritetaan KÄYTTÄJÄnä\n"
+" -v,--verbose ilmoita, jos signaalin lähetys onnistui\n"
+" -V,--version näytä versiotiedot\n"
+" -w,--wait odota prosessien loppumista\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP lähetä signaali kill-käskyllä vain prosesseille, "
+"joilla\n"
+" on asiayhteys (tämän on oltava ennen muita "
+"argumentteja)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Virheellinen aikamuoto"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Käyttäjän %s löytyminen epäonnistui\n"
+
+#: src/killall.c:1016
+#, fuzzy
+#| msgid "Invalid namespace name"
+msgid "Invalid namespace PID"
+msgstr "Virheellinen nimiavaruusnimi"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Virheellinen säännöllinen lauseke: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Suurin sallittu määrä nimiä on %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s-kohteesta puuttuu prosessirivit (ei ole liitetty?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Virhe liityttäessä pid-tunnukseen %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright © 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+#| " -8 output 8 bit clean streams.\n"
+#| " -n don't display read/write from fd headers.\n"
+#| " -c peek at any new child processes too.\n"
+#| " -d remove duplicate read/writes from the output.\n"
+#| " -V prints version info.\n"
+#| " -h prints this help.\n"
+#| "\n"
+#| " Press CTRL-C to end output.\n"
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Käyttö: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8 tuloste puhtaina 8-bittisinä virtoina.\n"
+" -n älä näytä lukemisia ja kirjoittamisia fd-otsakkeista.\n"
+" -c kurkista myös kaikkien tytärprosessien aikana.\n"
+" -d poista tulosteesta lukemis- ja kirjoittamistoimintojen\n"
+" kaksoiskappaleet.\n"
+" -V tulostaa versiotiedot.\n"
+" -h tulostaa tämän ohjeen.\n"
+"\n"
+" Lopeta tulostus painamalla näppäimiä CTRL-C.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Käyttö: prtstat [valitsimet] PID-prosessitunniste ...\n"
+" prtstat -V\n"
+"Tulosta tiedot prosesseista\n"
+" -r,--raw Tietojen raakanäyttö\n"
+" -V,--version Näytä versiotiedot ja poistu\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 2009 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "suoritetaan"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "levätään"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "levylepo"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombi"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "jäljitetty"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "sivutetaan"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "tuntematon"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Prosessi: %-14s\t\tTila: %c (%s)\n"
+" Suoritinnro: %-3d\t\tTTY: %s\tSäikeet: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Prosessi-, ryhmä- ja istuntotunnisteet\n"
+" Prosessitunniste: %d\t\t Emotunniste: %d\n"
+" Ryhmätunniste: %d\t\t Istuntotunniste: %d\n"
+" T-ryhmätunniste: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Sivuvirheet\n"
+" Tämä Prosessi (minor major): %8lu %8lu\n"
+" Lapsiprosessit (minor major): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Suoritinajat\n"
+" Tämä prosessi (käyttäjä järjestelmä vieras blkio): %6.2f %6.2f %6.2f "
+"%6.2f\n"
+" Lapsiprosessit (käyttäjä järjestelmä vieras blkio): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Muisti\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS-raja: %s\n"
+" Koodialku: %#-10lx\t\t Koodiloppu: %#-10lx\n"
+" Pinoalku: %#-10lx\n"
+" Pino-osoitin (ESP): %#10lx\t Käskyosoitin (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Vuorottaminen\n"
+" Menettelytapa: %s\n"
+" Nice: %ld \t\t RT Prioriteetti: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf kutsussa print_stat epäonnistui.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Ei ole olemassa prosessia, jonka pid-prosessitunniste on %d.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr ""
+"Stat-tiedoston avaaminen pid-prosessitunnisteelle %d (%s) epäonnistui\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Muistin varaaminen kohteelle proc_info epäonnistui\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Stat-tiedoston tutkiminen epäonnistui"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Virheellinen valitsin"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Sinun on tarjottava vähintään yksi PID-prosessitunniste."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"/proc ei ole liitetty, stat-käskyn suorittaminen tiedostolle /proc/self/stat "
+"epäonnistui.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s on tyhjä (ei liitetty?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+
+#: src/pstree.c:1324
+#, fuzzy, c-format
+#| msgid ""
+#| " -Z, --security-context\n"
+#| " show SELinux security contexts\n"
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" näytä SELinux-turvakonteksti\n"
+
+#: src/pstree.c:1326
+#, fuzzy, c-format
+#| msgid ""
+#| " PID start at this PID; default is 1 (init)\n"
+#| " USER show only trees rooted at processes of this user\n"
+#| "\n"
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+" PID aloita tällä PID-prosessitunnisteella; oletus on 1 (init)\n"
+" KÄYTTÄJÄ näytä vain puita, jotka alkavat käyttäjän omistuksessa\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM-signaali ei ole asetettu\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Päätteen ominaisuudet eivät ole selvillä\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "procfs-tiedosto %s-nimiavaruudelle ei ole käytettävissä\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Käyttäjätunnus puuttuu: %s\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+#| msgid "No processes found.\n"
+msgid "Process %d not found.\n"
+msgstr "Prosesseja ei löydy.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Prosesseja ei löydy.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Enter-näppäin sulkee\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: tuntematon signaali; %s -l luettelee signaalit.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2010 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2010 Werner Almesberger ja Craig Small\n"
+#~ "\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Usage: killall [ -Z ASIAYHTEYS ] [ -u KÄYTTÄJÄ ] [ -y AIKA ] [ -o AIKA ] "
+#~ "[ -eIgiqrvw ]\n"
+#~ " [ -s SIGNAALI | -SIGNAL ] NIMI...\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (ipc, mnt, net, pid, user, "
+#~ "uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Käyttö: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N tyyppi ]\n"
+#~ "Käyttö: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N tyyppi ]\n"
+#~ " [ -A | -G | -U ] [ PID | KÄYTTÄJÄ ]\n"
+#~ " pstree -V\n"
+#~ "Näytä prosessien puu.\n"
+#~ "\n"
+#~ " -a, --arguments näytä komentoriviargumentit\n"
+#~ " -A, --ascii käytä ASCII-pseudografiikkamerkkejä\n"
+#~ " -c, --compact älä tiivistä identtisiä alipuita\n"
+#~ " -h, --highlight-all korosta nykyinen prosessi ja sen periytymislähteet\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID korosta tämä prosessi ja sen periytymislähteet\n"
+#~ " -g, --show-pgids näytä prosessiryhmätunnisteet; edellyttää "
+#~ "valitsinta -c\n"
+#~ " -G, --vt100 käytä VT100-pseudografiikkamerkkejä\n"
+#~ " -l, --long älä typistä pitkiä riviä\n"
+#~ " -n, --numeric-sort lajittele tulostus PID-tunnuksen mukaan\n"
+#~ " -N tyyppi,\n"
+#~ " --ns-sort=tyyppi lajittele nimiavaruuden tyypin mukaan (ipc, mnt, "
+#~ "net,\n"
+#~ " pid, user, uts)\n"
+#~ " -p, --show-pids näytä PID-tunnukset; epäsuorasti -c\n"
+#~ " -s, --show-parents näyttää valitun prosessin vanhemmat\n"
+#~ " -S, --ns-changes näytä nimiavaruusvaihtumiset\n"
+#~ " -t, --thread-names näytä kokonaiset säienimet\n"
+#~ " -T, --hide-threads piilota säikeet, näytä vain prosessit\n"
+#~ " -u, --uid-changes näytä uid-vaihtumiset\n"
+#~ " -U, --unicode käytä UTF-8 (Unicode)-pseudografiikkamerkkejä\n"
+#~ " -V, --version näytä versiotiedot\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2009 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2009 Werner Almesberger ja Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2012 Werner Almesberger ja Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: pidof [ -eg ] NIMI...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e vaatii hyvin pitkien nimien täsmällistä vastaavuutta;\n"
+#~ " ohita, jos komentorivi ei ole käytettävissä.\n"
+#~ " -g näyttää prosessin ryhmätunnisteen prosessitunnisteen sijasta\n"
+#~ " -V näyttää versiotiedot\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2005 Werner Almesberger ja Craig Small\n"
+#~ "\n"
+
+#~ msgid "You cannot use the mounted and mountpoint flags together"
+#~ msgstr "Lippujen â€mounted†ja â€mountpoint†käyttäminen yhdessä epäonnistui"
+
+#~ msgid "Cannot stat mount point %s: %s\n"
+#~ msgstr ""
+#~ "Stat-käskyn suorittaminen mount-liitospisteelle %s epäonnistui: %s\n"
+
+#~ msgid "Cannot open /etc/mtab: %s\n"
+#~ msgstr "Tiedoston /etc/mtab avaaminen epäonnistui: %s\n"
+
+#~ msgid "Internal error: MAX_DEPTH not big enough.\n"
+#~ msgstr "Sisäinen virhe: MAX_DEPTH-vakio on liian pieni.\n"
+
+#~ msgid "-4 flag used but proc file %s is not readable\n"
+#~ msgstr "optio -4 käytössä mutta proc-tiedosto %s ei ole luettavissa\n"
+
+#~ msgid "-6 flag used but proc file %s is not readable\n"
+#~ msgstr "optio -6 käytössä mutta proc-tiedosto %s ei ole luettavissa\n"
+
+#~ msgid "kill %d"
+#~ msgstr "lopeta %d"
+
+#~ msgid "No automatic removal. Please use umount %s\n"
+#~ msgstr "Ei automaattista poistoa. Poista liitos %s\n"
+
+#~ msgid "No automatic removal. Please use swapoff %s\n"
+#~ msgstr "Ei automaattista poistoa. Käytä swapoff %s\n"
+
+#~ msgid "Internal error (type %d)\n"
+#~ msgstr "Sisäinen virhe (tyyppiä %d)\n"
+
+#~ msgid "kernel mount "
+#~ msgstr "kernel mount "
+
+#~ msgid "kernel loop "
+#~ msgstr "kernel loop "
+
+#~ msgid "kernel swap "
+#~ msgstr "kernel swap "
+
+#~ msgid "ignoring -m in name space \"%s\"\n"
+#~ msgstr "optio -m merkityksetön nimiavaruudessa â€%sâ€\n"
+
+#~ msgid ""
+#~ "usage: pstree [ -a ] [ -c ] [ -h | -H pid ] [ -l ] [ -n ] [ -p ] [ -u ]\n"
+#~ msgstr ""
+#~ "käyttö: pstree [ -a ] [ -c ] [ -h | -H pid ] [ -l ] [ -n ] [ -p ] [ -u ]\n"
+
+#~ msgid " [ -A | -G | -U ] [ pid | user]\n"
+#~ msgstr ""
+#~ " [ -A | -G | -U ] [ prosessitunniste | käyttäjätunnus]\n"
+
+#~ msgid ""
+#~ " pstree -V\n"
+#~ "\n"
+#~ msgstr ""
+#~ " pstree -V\n"
+#~ "\n"
+
+#~ msgid " -a show command line arguments\n"
+#~ msgstr " -a näytä komentoriviparametrit\n"
+
+#~ msgid " -A use ASCII line drawing characters\n"
+#~ msgstr " -A käytä ASCII-merkkejä viivanpiirtoon\n"
+
+#~ msgid " -c don't compact identical subtrees\n"
+#~ msgstr " -c älä yhdistä samanlaisia alipuita\n"
+
+#~ msgid " -h highlight current process and its ancestors\n"
+#~ msgstr " -h merkitse nykyinen prosessi ja sen esi-isät\n"
+
+#~ msgid " -H pid highlight process \"pid\" and its ancestors\n"
+#~ msgstr " -H pid merkitse prosessi â€pid†ja sen esi-isät\n"
+
+#~ msgid " -G use VT100 line drawing characters\n"
+#~ msgstr " -G käytä VT100-merkkejä viivanpiirtoon\n"
+
+#~ msgid " -l don't truncate long lines\n"
+#~ msgstr " -l älä katko pitkiä rivejä\n"
+
+#~ msgid " -n sort output by PID\n"
+#~ msgstr " -n järjestä tuloste prosessitunnisteen mukaan\n"
+
+#~ msgid " -p show PIDs; implies -c\n"
+#~ msgstr " -p näytä prosessitunnisteet; myös -c menee päälle\n"
+
+#~ msgid " -u show uid transitions\n"
+#~ msgstr " -u näytä käyttäjätunnusten vaihtumiset\n"
+
+#~ msgid " -s show Flask SIDs\n"
+#~ msgstr " -s näytä Flask SID -tunnisteet\n"
+
+#~ msgid " -U use UTF-8 (Unicode)) line drawing characters\n"
+#~ msgstr " -U käytä UTF-8 (Unicode)) -merkkejä viivanpiirtoon\n"
+
+#~ msgid " -V display version information\n"
+#~ msgstr " -V näytä versio\n"
+
+#~ msgid " pid start at pid, default 1 (init))\n"
+#~ msgstr " pid aloita prosessista pid, oletuksena 1 (init-prosessi))\n"
+
+#~ msgid "pstree comes with ABSOLUTELY NO WARRANTY.\n"
+#~ msgstr "pstree:llä ei ole mitään takuuta.\n"
+
+#~ msgid ""
+#~ "This is free software, and you are welcome to redistribute it under the "
+#~ "terms\n"
+#~ msgstr ""
+#~ "Tämä vapaa ohjelmisto ja saat kopioida ja levittää sitä GNU General "
+#~ "Public\n"
+
+#~ msgid "of the GNU General Public License.\n"
+#~ msgstr ""
+#~ "License -lisenssin mukaisesti. Tiedostossa COPYING on tarkemmat tiedot.\n"
+
+#~ msgid ""
+#~ "For more information about these matters, see the files named COPYING.\n"
+#~ msgstr "Tiedostossa COPYING on tarkemmat tiedot.\n"
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644
index 0000000..fb0b827
--- /dev/null
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..42a4eb0
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,888 @@
+# French translation of PSmisc messages.
+# Copyright (C) 2024 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Marc Léger <sorata@users.sourceforge.net>, 2001.
+# Benno Schulenberg <benno@vertaalt.nl>, 2007.
+# Frédéric Marchal <fmarchal@perso.be>, 2024.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-13 18:42+0100\n"
+"Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n >= 2);\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Utilisation : fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n ESPACE]\n"
+" [-k [-i] [-SIGNAL]] NOM...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Montre les processus utilisant les fichiers, sockets ou systèmes de fichiers "
+"nommés.\n"
+"\n"
+" -a,--all montre les fichiers inutilisés\n"
+" -i,--interactive demande avant de fermer un processus (ignoré sans -"
+"k)\n"
+" -I,--inode utilise toujours les inodes pour comparer les "
+"fichiers\n"
+" -k,--kill ferme les processus accédant au fichier spécifié\n"
+" -l,--list-signals liste les noms des signaux\n"
+" -m,--mount affiche les processus utilisant les systèmes de "
+"fichiers\n"
+" ou les périphériques blocs spécifiés\n"
+" -M,--ismountpoint exécute la requête seulement si NOM est un point de "
+"montage\n"
+" -n,--namespace ESPACE cherche dans l'espace de noms spécifié (file, udp ou "
+"tcp)\n"
+" -s,--silent mode silencieux\n"
+" -SIGNAL envoie ce signal au lieu de SIGKILL\n"
+" -u,--user affiche la liste des utilisateurs\n"
+" -v,--verbose mode bavard\n"
+" -w,--writeonly ferme uniquement les processus avec la permission en "
+"écriture\n"
+" -V,--version affiche des informations sur la version\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 cherche des sockets IPv4 seulement\n"
+" -6,--ipv6 cherche des sockets IPv6 seulement\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" noms udp/tcp: [port_local][,[hôte_distant][,[port_distant]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 1993-2024 Werner Almesberger et Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc n'est couvert par AUCUNE GARANTIE.\n"
+"C'est un logiciel libre, et vous pouvez le redistribuer\n"
+"en respectant les termes de la licence GNU General Public License.\n"
+"Pour plus de précisions à ce sujet, voir les fichiers nommés COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Impossible d'ouvrir le répertoire /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Impossible d'allouer de la mémoire au processus correspondant: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Le nom de fichier %s n'existe pas.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Impossible d'obtenir les stat de %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Ne peut résoudre le port local %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Port local AF inconnu %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Impossible d'ouvrir le fichier protocole « %s »: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Le nom de fichier %s n'est pas un point de montage.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Option %s incorrecte\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "L'option « --namespace » requiert un paramètre."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Paramètre incorrect pour « --namespace »"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr ""
+"Vous ne pouvez utiliser que des fichiers avec les options de point de montage"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Aucune spécification de processus donnée"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "l'option « --all » ne peut être utilisée avec l'option « --silent »"
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"Vous ne pouvez pas rechercher simultanément et exclusivement les sockets "
+"IPv4 et IPv6"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s UTIL. PID ACCÈS COMMANDE\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(inconnu)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Impossible d'obtenir les stat du fichier %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Impossible d'ouvrir /proc/net/unix : %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Tuer le processus %d ? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Impossible de tuer le processus %d : %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Impossible d'ouvrir un socket réseau.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Impossible de trouver le numéro du périphérique des sockets\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Tuer %s(%s%d) ? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Envoyer signal %s(%s%d) ? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Impossible d'obtenir l'UID à partir de l'état du processus\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Mauvaise expression régulière : %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: Ignore la correspondance partielle %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Tué %s(%s%d) avec le signal %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: aucun processus trouvé\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Usage : killall [OPTION]... [--] NOM...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact requiert une concordance parfaite des noms très "
+"longs\n"
+" -I,--ignore-case recherche en ignorant la casse\n"
+" -g,--process-group tue le groupe associé au programme au lieu de celui-"
+"ci\n"
+" -y,--younger-than tue les programmes créés avant HEURE\n"
+" -o,--older-than tue les programmes créés après HEURE\n"
+" -i,--interactive demande une confirmation avant de tuer\n"
+" -l,--list affiche tous les noms de signaux connus\n"
+" -q,--quiet n'affiche pas les remarques\n"
+" -r,--regexp interprète NOM comme une expression régulière "
+"étendue\n"
+" -s,--signal SIGNAL envoie ce signal au lieu de SIGTERM\n"
+" -u,--user UTILISATEUR ne tue que le(s) programme(s) utilisé(s) par "
+"UTILISATEUR\n"
+" -v,--verbose informe si le signal a été correctement envoyé\n"
+" -V,--version affiche les informations sur la version\n"
+" -w,--wait attend que les programmes s'arrêtent\n"
+" -n,--ns PID agit sur les processus qui appartiennent au même "
+"espace\n"
+" de nom que PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP ferme seulement le(s) processus ayant l'argument "
+"context\n"
+" (doit précéder les autres arguments)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Format de temps incorrect"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Utilisateur %s introuvable\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "PID d'espace de nom invalide"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Mauvaise expression régulière : %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Le nombre maximum de noms est %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s n'a aucune entrée de processus (pas monté ?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Erreur lors de l'attachement au pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean sort un flux sans le bit 8.\n"
+" -n, --no-headers n'affiche pas les lectures/écritures dans "
+"les en-têtes fd.\n"
+" -c, --follow examine également chaque nouveau processus "
+"fils.\n"
+" -t, --tgid examine tous les threads dont tgid est égal "
+"à <pid>.\n"
+" -d, --duplicates-removed ignore les lectures/écritures dupliquées.\n"
+" -V, --version affiche la version.\n"
+" -h, --help affiche cet aide-mémoire.\n"
+"\n"
+" Appuyez sur CTRL-C pour interrompre.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Affiche les informations au sujet d'un processus\n"
+" -r,--raw Affiche les informations brutes\n"
+" -V,--version Affiche la version et ne fait rien d'autre\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "en cours"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "endormi"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "attente disque"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "tracé"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "demande de page"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "inconnu"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Processus: %-14s\t\tÉtat: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Processus, Groupe et ID de session\n"
+" ID processus: %d\t\t ID parent: %d\n"
+" ID groupe: %d\t\t ID session: %d\n"
+" ID groupe T: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Erreurs de page\n"
+" Ce processus (mineur majeur): %8lu %8lu\n"
+" Processus fils (mineur majeur): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Temps CPU\n"
+" Ce processus (utilisateur système invité blkio): %6.2f %6.2f %6.2f "
+"%6.2f\n"
+" Processus fils (utilisateur système invité): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Mémoire\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t Limite RSS: %s\n"
+" Début code: %#-10lx\t\t Fin code: %#-10lx\n"
+" Début pile: %#-10lx\n"
+" Pointeur pile (ESP): %#10lx\t Pointeur inst. (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Ordonnancement\n"
+" Politique: %s\n"
+" Courtoisie: %ld \t\t Priorité TR: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "échec de asprintf dans print_stat.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Le processus avec le pid %d n'existe pas.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Impossible d'ouvrir le fichier stat du pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Impossible d'allouer de la mémoire pour proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Impossible d'analyser le fichier stat"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Option incorrecte"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Vous devez spécifier au moins un PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"/proc n'est pas monté, impossible d'obtenir les stat de /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s est vide (pas monté ?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | UTILISATEUR ]\n"
+" ou: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Affiche un arbre des processus.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments montrer les arguments de la ligne de commande\n"
+" -A, --ascii utiliser les caractères de dessin de lignes ASCII\n"
+" -c, --compact-not ne pas compacter des sous-arbres identiques\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TYPE coloriser les processus par attribut\n"
+" (age)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids montrer les ids de groupes de processus ; implique -c\n"
+" -G, --vt100 utiliser les caractères de dessin de lignes du VT100\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all mettre en évidence le processus courant et ses "
+"ancêtres\n"
+" -H PID, --highlight-pid=PID\n"
+" mettre en évidence ce processus et ses ancêtres\n"
+" -l, --long ne pas tronquer les longues lignes\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort trier la sortie par PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" trier la sortie par ce type d'espace de noms\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids montrer les PID ; implique -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents montrer les parents du processus sélectionné\n"
+" -S, --ns-changes montrer les transitions d'espaces de noms\n"
+" -t, --thread-names montrer les noms complets des threads\n"
+" -T, --hide-threads cacher les threads, montrer uniquement les processus\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes montrer les transitions de UID\n"
+" -U, --unicode utiliser les caractères UTF-8 (Unicode) pour dessiner "
+"les lignes\n"
+" -V, --version afficher les informations de la version\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" montre les attributs de sécurité\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID commence à ce PID; le défaut est 1 (init)\n"
+" USER montre seulement les arbres nichés aux processus de cet "
+"utilisateur\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM n'est pas défini\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Impossible d'obtenir les spécifications du terminal\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "fichier procfs indisponible pour l'espace de nom %s\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Aucun utilisateur portant ce nom: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Processus %d non trouvé.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Aucun processus trouvé.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Appuyez sur la touche Entrée pour fermer\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: signal inconnu; %s -l liste les signaux.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger et Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Usage : killall [-Z CONTEXTE] [-u UTILISATEUR] [-y HEURE ] [ -o HEURE ] "
+#~ "[ -eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NOM...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | UTILISATEUR ]\n"
+#~ " ou: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2019 Werner Almesberger et Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | UTILISATEUR ]\n"
+#~ " pstree -V\n"
+#~ "Affiche l'arborescence des processus.\n"
+#~ "\n"
+#~ " -a, --arguments affiche les paramètres de la ligne de commande\n"
+#~ " -A, --ascii utilise les caractères de tracé ASCII\n"
+#~ " -c, --compact ne groupe pas les branches identiques\n"
+#~ " -h, --highlight-all surligne le processus courant et ses parents\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID surligne le processus spécifié et ses parents\n"
+#~ " -g, --show-pgids affiche les ID des groupes du processus (implique -"
+#~ "c)\n"
+#~ " -G, --vt100 utilise les caractères de tracé VT100\n"
+#~ " -l, --long ne tronque pas les longues lignes\n"
+#~ " -n, --numeric-sort trie le résultat par PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type trie par type d'espace de nom (cgroup, ipc, mnt, "
+#~ "net, pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids affiche les PIDs (implique -c)\n"
+#~ " -s, --show-parents affiche les parents du processus sélectionné\n"
+#~ " -S, --ns-changes affiche les transitions d'espaces de noms\n"
+#~ " -t, --thread-names affiche les noms complets des threads\n"
+#~ " -T, --hide-threads cache les threads, ne montre que les processus\n"
+#~ " -u, --uid-changes montre les transitions de uid\n"
+#~ " -U, --unicode utilise les caractères de tracé UTF-8 (Unicode)\n"
+#~ " -V, --version affiche les informations sur la version\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger et Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger et Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage : pidof [ -eg ] NOM...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e requiert une concordance parfaite des noms très longs;\n"
+#~ " sauter si la ligne de commande est indisponible\n"
+#~ " -g montre l'ID du groupe associé au lieu de celui du programme\n"
+#~ " -V affiche les informations sur la version\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger et Craig Small\n"
+#~ "\n"
diff --git a/po/hr.gmo b/po/hr.gmo
new file mode 100644
index 0000000..a45d3e5
--- /dev/null
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 0000000..8577551
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,856 @@
+# Translation of psmisc to Croatian.
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
+# Božidar Putanec <bozidarp@yahoo.com>, 2016, 2018, 2019, 2021, 2022,2024.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-15 11:08-0800\n"
+"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Bugs: Report translation errors to the Language-Team address\n"
+"X-Generator: Poedit 3.4.2\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+# 1. https://en.wikipedia.org/wiki/Namespace
+# 2. In essence, a namespace defines a scope.
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Uporaba: fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n PROSTOR]\n"
+" [-k [-i] [-SIGNAL]] IME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Prikaže procese koji koriste navedene datoteke, utiÄnice ili datoteÄne "
+"sustave.\n"
+"\n"
+" -a, --all pokaže i nekorištene datoteke\n"
+" -i, --interactive pita prije ubijanja (zanemareno bez -k)\n"
+" -I, --inode uvijek rabi inodes za usporedbu datoteka\n"
+" -k, --kill ubije procese koji pristupaju navedenoj datoteci\n"
+" -l, --list-signals ispiše imena dostupnih signala\n"
+" -m, --mount pokaže sve procese koji koriste navedene\n"
+" datoteÄne sustave ili blok ureÄ‘aje\n"
+" -M, --ismountpoint izvrÅ¡i zahtjev samo ako je IME toÄka montiranja\n"
+" -n, --namespace PROSTOR traži u ovom imenskom PROSTORU (file, udp ili "
+"tcp)\n"
+" -s, --silent tihi rad (bez ispisa)\n"
+" -SIGNAL pošalje SIGNAL umjesto SIGKILL\n"
+" -u, --user pokaže oznake korisnika (ID)\n"
+" -v, --verbose opširni ispis\n"
+" -w, --writeonly ubije sve procese s dozvolom pisanja\n"
+" -V, --version informacije o ovoj inaÄici\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4, --ipv4 pretraži samo IPv4 utiÄnice\n"
+" -6, --ipv6 pretraži samo IPv6 utiÄnice\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" udp/tcp imena: [lokalni_port][,[udaljeno_raÄunalo][,[udaljeni_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"Za PSmisc NEMA APSOLUTNO NIKAKVIH JAMSTVA.\n"
+"Ovo je slobodan softver: slobodno ga mijenjajte i dijelite\n"
+"pod uvjetima opisanim u GNU General Public License.\n"
+"Dodatne obavijesti o licenciji potražite u datoteci COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Nije moguće otvoriti direktorij /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Nije moguće dodijeliti memoriju za odgovarajući proces: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Navedena datoteka %s ne postoji\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Nije moguće odrediti status %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Nije moguće odrediti lokalni port %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Nepoznati lokalni port AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Nije moguće otvoriti datoteku protokola „%s“: %s\n"
+
+# http://www.linfo.org/mount_point.html
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Navedeni naziv (datoteke) %s nije toÄka za montiranje (mountpoint)\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Nevaljana opcija %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Opcija imenskog prostora (namespace) zahtijeva argument."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Nevaljano ime imenskog prostora (namespace)"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr ""
+"Smijete koristiti samo datoteke uz opcije toÄke montiranja (mountpoint)"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Nije navedena specifikacija procesa"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "opcija all (-a) ne može se koristiti uz opciju silent (-s)."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Ne možete istovremeno pretraživati samo IPv4 i samo IPv6 utiÄnice"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s KORISNIK PID PRISTUP NAREDBA\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(nepoznato)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Nije moguće odrediti status datoteke %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Nije moguće otvoriti /proc/net/unix: %s\n"
+
+# y umjesto d?
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Ubiti proces %d? (d/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Nije moguće ubiti proces %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Nije moguće otvoriti mrežnu utiÄnicu\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Nije moguće pronaći broj ureÄ‘aja utiÄnice\n"
+
+# ista stvar
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Ubiti proces %s(%s%d)? (d/N) "
+
+# Å¡to je ovo?
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Procesu %s(%s%d) poslati signal? (d/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Nije moguće dobiti UID iz statusa procesa\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Loši regularni izraz: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: preskaÄe se djelomiÄno podudaranje %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Proces %s(%s%d) ubijen je signalom %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: proces nije pronađen\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Uporaba: killall [OPCIJA]... [--] IME...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e, --exact zahtjeva toÄno podudaranje za vrlo duga imena\n"
+" -I, --ignore-case zanemari veliÄinu slova prilikom pretrage procesa\n"
+" -g, --process-group ubije procesnu grupu umjesto procesa\n"
+" -y, --younger-than ubije procese mlađe od VREMENA\n"
+" -o, --older-than ubije procese starije od VREMENA\n"
+" -i, --interactive pita prije ubijanja\n"
+" -l, --list ispiše imena svih poznatih signala\n"
+" -q, --quiet ne ispisuje prigovore\n"
+" -r, --regexp interpretira IME kao prošireni regularni izraz\n"
+" -s, --signal SIGNAL pošalje SIGNAL umjesto SIGTERM\n"
+" -u, --user KORISNIK ubija samo proces(e) od KORISNIKA\n"
+" -v, --verbose javlja ako je signal uspješno poslan\n"
+" -V, --version informacija o ovoj inaÄici\n"
+" -w, --wait Äeka dok proces ne umre\n"
+" -n, --ns PID podudara samo procese koji pripadaju istom imenskom\n"
+" prostoru kao i PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z, --context REGEXP ubije samo proces(e) s odgovarajućim kontekstom\n"
+" (mora prethoditi ostalim argumentima)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Nevaljani format vremena"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Nije moguće pronaći korisnika %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Nevaljani naziv za imenski prostor (namespace)"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Loši regularni izraz: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Najveći broj imena je %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s proces nema zapise -- je li montiran?\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Greška pridruživanja PID-u %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright © 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Uporaba: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean producira Äisti 8-bitni izlaz\n"
+" -n, --no-headers ne pokazuje Äitanje i pisanje iz fd "
+"zaglavlja\n"
+" -c, --follow također gleda svaki novi dijete-proces\n"
+" -t, --tgid gleda sve dretve za koje je tgid jednak "
+"<pid>\n"
+" -d, --duplicates-removed uklanja sve duplikate na izlazu\n"
+" -V, --version informacije o ovoj inaÄici\n"
+" -h, --help ova pomoć\n"
+"\n"
+" Pritisnite CTRL-C da zaustavite ispis/izlaz.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Uporaba: prtstat [opcije] PID ...\n"
+" prtstat -V\n"
+"Ispiše informacije o procesu\n"
+" -r, --raw sirovi prikaz informacija\n"
+" -V, --version informacije o ovoj inaÄici\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "pokrenuto"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "u mirovanju"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "disk spava"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombi"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "praćeno"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "straniÄenje"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "nepoznato"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Proces: %-14s\t\tStanje: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tDretve: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"ID-ovi procesa, grupe i sesije\n"
+" Process ID: %d\t\t ID roditelja: %d\n"
+" Group ID: %d\t\t ID sesije: %d\n"
+" T Group ID: %d\n"
+"\n"
+
+# http://blog.scoutapp.com/articles/2015/04/10/understanding-page-faults-and-memory-swap-in-outs-when-should-you-worry
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Page Faults\n"
+" Ovaj proces (minor major): %8lu %8lu\n"
+" Dijete-proces (minor major): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU vremena\n"
+" Ovaj proces (korisnik sustav gost blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Potomci tog procesa (korisnik sustav gost): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memorija\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS graniÄna vrijednost: %s\n"
+" Code Start: %#-10lx\t\t Konac koda: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t PokazivaÄ instrukcije (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Planiranje\n"
+" Pravilnik: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf() u print_stat() nije uspjela\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Proces s PID-om %d ne postoji\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Nije moguće otvoriti statusnu datoteku za PID %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Nije moguće dodijeliti memoriju za proc_info()\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Nije moguće skanirati statusnu datoteku"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Nevaljana opcija"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Morate navesti barem jedan PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc nije montiran, nije moguće odrediti status /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s je prazan -- je li montiran?\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Uporaba: pstree [-acglpsStTuZ] [-h | -H PID] [-n | -N tip]\n"
+" [-A | -G | -U] [PID | KORISNIK]\n"
+" ili: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Prikaže stablo procesa.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments prikaže argumente na naredbenom retku \n"
+" -A, --ascii koristi ASCII znakove za crtanje linija\n"
+" -c, --compact-not ne suzbija identiÄna podstabla\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TIP procesi obojani prema atributu\n"
+" (vijek)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids prikaže id-ove procesnih grupa; implicira -c\n"
+" -G, --vt100 koristi VT100 znakove za crtanje linija\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all istakne trenutni proces i njegove pretke\n"
+" -H PID, --highlight-pid=PID\n"
+" istakne taj proces i njegove pretke\n"
+" -l, --long ne kratiti duge retke\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort izlaz svrsta po PID-u\n"
+" -N TYPE, --ns-sort=TIP izlaz svrsta po tom tipu imenskog prostora\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids prikaže PID-ove; implicira -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents pokaže pretke odabranih procesa\n"
+" -S, --ns-changes pokaže tranzicije imenskih prostora\n"
+" -t, --thread-names pokaže puno ime dretvi\n"
+" -T, --hide-threads skrije dretve, pokaže samo procese\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes pokaže tranzicije UID-ova\n"
+" -U, --unicode koristi UTF-8 (Unicode) znakove za crtanje linija\n"
+" -V, --version informacije o inaÄici programa\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" prikaže sigurnosne atribute\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID zapoÄne s ovim PID-om; zadano je 1 (init)\n"
+" KORISNIK pokaže samo stablo s korijenom u procesima ovog KORISNIKA\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM nije postavljen\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Nije moguće otkriti mogućnosti terminala\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "procfs datoteka za %s imenski prostor (namespace) nije dostupna\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Nema takvog korisnika: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Proces %d nije pronađen.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Nijedan proces nije pronađen.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Pritisnite Return/Enter da zatvorite\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: nepoznati signal; %s -l ispisuje signale\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Uporaba: killall [-Z KONTEKST] [-u KORISNIK] [-y TIME] [-o TIME] [-"
+#~ "eIgiqrvw]\n"
+#~ " [-s -SIGNAL | -SIGNAL] IME...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Uporaba: pstree [-acglpsStTu] [-h | -H PID] [-n | -N vrsta]\n"
+#~ " [-A | -G | -U ] [PID | KORISNIK]\n"
+#~ " ili: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Uporaba: pstree [-acglpsStuZ] [-h | -H PID] [-n | -N vrsta]\n"
+#~ "Uporaba: pstree [-acglpsStu] [-h | -H PID] [-n | -N vrsta]\n"
+#~ " [-A | -G | -U] [PID | KORISNIK]\n"
+#~ " pstree -V\n"
+#~ "Prikaže stablo procesa.\n"
+#~ "\n"
+#~ " -a, --arguments pokaže argumente naredbenog retka\n"
+#~ " -A, --ascii rabi ASCII znakove za crtanje\n"
+#~ " -c, --compact ne sažima identiÄna podstabla\n"
+#~ " -h, --highlight-all istakne trenutaÄni proces i njegove pretke\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID istakne PID proces i njegove pretke\n"
+#~ " -g, --show-pgids pokaže identitete procesne grupe; implicira -c\n"
+#~ " -G, --vt100 rabi VT100 znakove za crtanje\n"
+#~ " -l, --long ne podrezuje dugaÄke retke\n"
+#~ " -n, --numeric-sort sortira prikaz po PID-ovima\n"
+#~ " -N vrsta,\n"
+#~ " --ns-sort=vrsta sortira po vrsti imenskog prostora\n"
+#~ " (cgroup, ipc, mnt, net, pid, user, uts)\n"
+#~ " -p, --show-pids pokaže PID-ove; implicira -c\n"
+#~ " -s, --show-parents pokaže pretke (roditelje) odabranog procesa\n"
+#~ " -S, --ns-changes pokaže tranzicije imenskog prostora\n"
+#~ " -t, --thread-names pokaže puno ime dretvi\n"
+#~ " -T, --hide-threads pokaže samo procese a ne i dretve\n"
+#~ " -u, --uid-changes pokaže UID tranzicije\n"
+#~ " -U, --unicode rabi UTF-8 (Unicode) znakove za crtanje\n"
+#~ " -V, --version informacije o ovoj inaÄici\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2014 Werner Almesberger i Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2012 Werner Almesberger i Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger i Craig Small\n"
+#~ "\n"
diff --git a/po/hu.gmo b/po/hu.gmo
new file mode 100644
index 0000000..55d1c95
--- /dev/null
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..1d9565b
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,847 @@
+# Hungarian translation of psmisc
+# Copyright (C) 2006, 2007, 2009, 2012, 2014, 2017 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Emese Kovacs <emese@instantweb.hu>, 2006.
+# Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2009, 2012.
+# Balázs Úr <urbalazs@gmail.com>, 2014, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.0-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2017-04-27 22:05+0200\n"
+"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
+"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Használat: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n NÉVTÉR]\n"
+" [-k [-i] [-SZIGNÃL]] NÉV...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Megjeleníti a megnevezett fájlokat, foglalatokat vagy fájlrendszereket "
+"használó\n"
+"folyamatokat.\n"
+"\n"
+" -a,--all a nem használt fájlok is jelenjenek meg\n"
+" -i,--interactive kérdés kilövés előtt (-k nélkül figyelmen kívül "
+"marad)\n"
+" -I,--inode mindig használjon inode-okat fájlok "
+"összehasonlításához\n"
+" -k,--kill a megnevezett fájlokhoz hozzáférő folyamatok "
+"kilövése\n"
+" -l,--list-signals elérhető szignálnevek felsorolása\n"
+" -m,--mount a megnevezett fájlrendszereket vagy blokkeszközöket\n"
+" használó összes folyamat megjelenítése\n"
+" -M,--ismountpoint kérés teljesítése csak ha a NÉV egy csatolási pont\n"
+" -n,--namespace NÉVTÉR keresés ebben a névtérben (file, udp vagy tcp)\n"
+" -s,--silent néma működés\n"
+" -SZIGNÃL ezen szignál elküldése a SIGKILL helyett\n"
+" -u,--user felhasználói azonosítók megjelenítése\n"
+" -v,--verbose részletes kimenet\n"
+" -w,--writeonly csak írási hozzáféréssel rendelkező folyamatok "
+"kilövése\n"
+" -V,--version verzióinformációk megjelenítése\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 csak IPv4 foglalatok keresése\n"
+" -6,--ipv6 csak IPv6 foglalatok keresése\n"
+
+#: src/fuser.c:170
+#, fuzzy, c-format
+#| msgid ""
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" - kapcsolók visszaállítása\n"
+"\n"
+" udp/tcp nevek: [helyi_port][,[távoli_gép][,[távoli_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2014 Werner Almesberger és Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"A PSmisc csomagra nem vonatkozik ABSZOLÚT SEMMILYEN GARANCIA\n"
+"Ez egy szabad szoftver, a GNU General Public License feltételei mellett\n"
+"bármikor továbbíthatja, a részletekért lásd a COPYING fájlt.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "A /proc könyvtár nem nyitható meg: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Nem foglalható memória az illeszkedő folyamat részére: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "A megadott %s fájlnév nem létezik.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "%s nem érhető el: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "A(z) %s helyi port nem oldható fel: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Ismeretlen helyi port AF: %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Nem nyitható meg a(z) \"%s\" protokollfájl: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "A megadott %s fájlnév nem csatolási pont.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: érvénytelen kapcsoló: %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "A névtér kapcsoló argumentumot igényel."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Érvénytelen névtérnév"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Fájlok csak csatolási pont kapcsolókkal használhatók"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Nincs megadva folyamatmeghatározás"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "az összes kapcsoló nem használható a néma kapcsolóval."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Nem lehet egyszerre csak IPv4 és csak IPv6 foglalatokat keresni"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s FELHASZNÃLÓ PID HOZZÃFÉRÉS PARANCS\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(ismeretlen)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "A(z) %s fájl nem érhető el: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "A /proc/net/unix könyvtár nem nyitható meg: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Kilövi a(z) %d folyamatot? (i/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "A(z) %d folymat kilövése nem sikerült: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Nem nyitható meg hálózati foglalat\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Nem található a foglalat eszközszáma.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Kilövi ezt: %s(%s%d) ? (i/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Elküldi a(z) %s(%s%d) szignált? (i/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr ""
+"killall: Nem kérhető le a felhasználói azonosító a folyamat állapotából\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Hibás reguláris kifejezés: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: %s(%d) részleges találat átlépése\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d) kilőve a(z) %d szignállal\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: nem található folyamat\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Használat: killall [KAPCSOLÓ]... [--] NÉV...\n"
+
+#: src/killall.c:839
+#, fuzzy, c-format
+#| msgid ""
+#| " killall -l, --list\n"
+#| " killall -V, --version\n"
+#| "\n"
+#| " -e,--exact require exact match for very long names\n"
+#| " -I,--ignore-case case insensitive process name match\n"
+#| " -g,--process-group kill process group instead of process\n"
+#| " -y,--younger-than kill processes younger than TIME\n"
+#| " -o,--older-than kill processes older than TIME\n"
+#| " -i,--interactive ask for confirmation before killing\n"
+#| " -l,--list list all known signal names\n"
+#| " -q,--quiet don't print complaints\n"
+#| " -r,--regexp interpret NAME as an extended regular expression\n"
+#| " -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+#| " -u,--user USER kill only process(es) running as USER\n"
+#| " -v,--verbose report if the signal was successfully sent\n"
+#| " -V,--version display version information\n"
+#| " -w,--wait wait for processes to die\n"
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact megköveteli a pontos egyezést nagyon hosszú nevek "
+"esetén;\n"
+" -I,--ignore-case a folyamatnév-illesztés ne legyen kis- és\n"
+" nagybetűérzékeny\n"
+" -g,--process-group folyamatcsoport kilövése folyamat helyett\n"
+" -y,--younger-than az IDÅNÉL fiatalabb folyamatok kilövése\n"
+" -o,--older-than az IDÅNÉL öregebb folyamatok kilövése\n"
+" -i,--interactive megerősítés kérése kilövés előtt\n"
+" -l,--list az összes ismert szignálnév felsorolása\n"
+" -q,--quiet ne kérdezzen\n"
+" -r,--regexp a NÉV értelmezése kiterjesztett reguláris "
+"kifejezésként\n"
+" -s,--signal SZIGNÃL ezen szignál elküldése a SIGTERM helyett\n"
+" -u,--user FELHASZNÃLÓ csak a FELHASZNÃLÓ nevében futó folyamatok "
+"kilövése\n"
+" -v,--verbose értesítés, ha a szignál küldése sikeres\n"
+" -V,--version verzióinformációk megjelenítése\n"
+" -w,--wait várja meg, amíg a folyamatok meghalnak\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP csak a kontextussal rendelkező folyamatok kilövése\n"
+" (meg kell előznie az egyéb argumentumokat)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Érvénytelen időformátum"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "A(z) %s felhasználó nem található\n"
+
+#: src/killall.c:1016
+#, fuzzy
+#| msgid "Invalid namespace name"
+msgid "Invalid namespace PID"
+msgstr "Érvénytelen névtérnév"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Hibás reguláris kifejezés: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: A nevek maximális száma %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s nem tartalmaz folyamatbejegyzéseket (nincs csatolva?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Hiba a csatlakozás közben a(z) %i folyamatazonosítóhoz\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+#| " -8 output 8 bit clean streams.\n"
+#| " -n don't display read/write from fd headers.\n"
+#| " -c peek at any new child processes too.\n"
+#| " -d remove duplicate read/writes from the output.\n"
+#| " -V prints version info.\n"
+#| " -h prints this help.\n"
+#| "\n"
+#| " Press CTRL-C to end output.\n"
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Használat: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8 8 bites tiszta adatfolyamok kiírása.\n"
+" -n ne jelenítse meg az írás/olvasást az fd fejlécekből.\n"
+" -c új gyermekfolyamatok megjelenítése.\n"
+" -d többszörös olvasások/írások eltávolítása a kimenetből.\n"
+" -V verzióinformációk kiírása.\n"
+" -h ezen súgó kiírása.\n"
+"\n"
+" A CTRL-C segítségével megszakítható a kimenet.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Használat: prtstat [kapcsolók] PID ...\n"
+" prtstat -V\n"
+"Információk kiírása egy folyamatról\n"
+" -r,--raw Az információk nyers megjelenítése\n"
+" -V,--version Verzióinformációk kiírása és kilépés\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "fut"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "alszik"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "lemez alszik"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombi"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "követett"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "lapoz"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "ismeretlen"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Folyamat: %-14s\t\tÃllapot: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tSzálak: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Folyamat, csoport és munkamenet-azonosítók\n"
+" Folyamat az.: %d\t\t Szülő az.: %d\n"
+" Csoport az.: %d\t\t M.menet az.: %d\n"
+" T Csoport az.: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Laphibák\n"
+" Ez a folyamat (minor major): %8lu %8lu\n"
+" Gyermekfolyamatok (minor major): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU idők\n"
+" Ez a folyamat (felh. rendszer vendég blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Gyermekfolyamatok (felh. rendszer vendég ): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memória\n"
+" Vméret: %-10s\n"
+" RSS: %-10s \t\t RSS korlát: %s\n"
+" Kód kezdete: %#-10lx\t\t Kód vége: %#-10lx\n"
+" Verem kezdete: %#-10lx\n"
+" Veremmutató (ESP): %#10lx\t Utasításmutató (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Ütemezés\n"
+" Irányelv: %s\n"
+" Nice: %ld \t\t RT prioritás: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "az asprintf a print_stat hívásban sikertelen.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Nem létezik %d PID-ű folyamat.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Nem érhető el a fájl a(z) %d (%s) PID-hez\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Nem foglalható memória a proc_info részére\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Nem olvasható be a stat fájl"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Érvénytelen kapcsoló"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Legalább egy PID-et meg kell adnia."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "a /proc nincs csatolva, nem érhető el a /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "a(z) %s üres (nincs csatlakoztatva?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+
+#: src/pstree.c:1324
+#, fuzzy, c-format
+#| msgid ""
+#| " -Z, --security-context\n"
+#| " show SELinux security contexts\n"
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" SELinux biztonsági kontextusok megjelenítése\n"
+
+#: src/pstree.c:1326
+#, fuzzy, c-format
+#| msgid ""
+#| " PID start at this PID; default is 1 (init)\n"
+#| " USER show only trees rooted at processes of this user\n"
+#| "\n"
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+" PID kezdés ezzel a PID-del; az alapértelmezés az 1 (init)\n"
+" FELHASZNÃLÓ csak az adott felhasználó folyamataiból kiinduló fák\n"
+" megjelenítése\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "A TERM nincs beállítva\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "A terminál képességei nem kérhetők le\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "procfs fájl nem érhető el a(z) %s névtérhez\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Nincs ilyen felhasználónév: %s\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+#| msgid "No processes found.\n"
+msgid "Process %d not found.\n"
+msgstr "Nem találhatók folyamatok.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Nem találhatók folyamatok.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "A bezáráshoz nyomj entert\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: ismeretlen szignál; a %s -l felsorolja a szignálokat.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2010 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2010 Werner Almesberger és Craig Small\n"
+#~ "\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Használat: killall [-Z KONTEXTUS] [-u FELHASZNÃLÓ] [ -y IDÅ ] [ -o IDÅ ] "
+#~ "[ -eIgiqrvw ]\n"
+#~ " [ -s SZIGNÃL | -SZIGNÃL ] NÉV...\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (ipc, mnt, net, pid, user, "
+#~ "uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Használat: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N típus ]\n"
+#~ "Használat: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N típus ]\n"
+#~ " [ -A | -G | -U ] [ PID | FELHASZNÃLÓ ]\n"
+#~ " pstree -V\n"
+#~ "Megjeleníti a folyamatok fáját.\n"
+#~ "\n"
+#~ " -a, --arguments parancssori argumentumok megjelenítése\n"
+#~ " -A, --ascii ASCII sorrajzoló karakterek használata\n"
+#~ " -c, --compact azonos részfákat ne tömörítse\n"
+#~ " -h, --highlight-all az aktuális folyamat és őseinek kiemelése\n"
+#~ " -H PID, \n"
+#~ " --highlight-pid=PID az adott folyamat és őseinek kiemelése\n"
+#~ " -g, --show-pgids folyamatcsoport-azonosítók megjelenítése,\n"
+#~ " magába foglalja a -c kapcsolót\n"
+#~ " -G, --vt100 VT100 sorrajzoló karakterek használata\n"
+#~ " -l, --long ne csonkítsa a hosszú sorokat\n"
+#~ " -n, --numeric-sort kimenet rendezése PID szerint\n"
+#~ " -N típus,\n"
+#~ " --ns-sort=típus névtértípus szerinti rendezés (ipc, mnt, net, pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids a PID-ek megjelenítése; magába foglalja a -c "
+#~ "kapcsolót\n"
+#~ " -s, --show-parents a kiválasztott folyamat szülőinek megjelenítése\n"
+#~ " -S, --ns-changes névtér átmenetek megjelenítése\n"
+#~ " -t, --thread-names teljes szálnevek megjelenítése\n"
+#~ " -T, --hide-threads szálak elrejtése, csak folyamatok megjelenítése\n"
+#~ " -u, --uid-changes az uid átmenetek megjelenítése\n"
+#~ " -U, --unicode UTF-8 (Unicode) sorrajzoló karakterek használata\n"
+#~ " -V, --version verzióinformációk megjelenítése\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2009 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2009 Werner Almesberger és Craig Small\n"
+#~ "\n"
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644
index 0000000..1bd76b7
--- /dev/null
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..b6a2163
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,754 @@
+# Pesan bahasa indonesia untuk psmisc.
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Arif E. Nugroho <arif_endro@yahoo.com>, 2008, 2009, 2010.
+# Andika Triwidada <andika@gmail.com>, 2021, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.6-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2022-12-08 21:51+0700\n"
+"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Penggunaan: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n RUANG]\n"
+" [-k [-i] [-SIGNAL]] NAMA...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Tampilkan proses yang menggunakan nama berkas, socket, atau sistem berkas.\n"
+"\n"
+" -a,--all tampilkan berkas yang tidak digunakan juga\n"
+" -i,--interactive tanya sebelum menghentikan (abaikan tanpa -k)\n"
+" -I,--inode selalu gunakan inode untuk membandingkan berkas\n"
+" -k,--kill hentikan proses yang mengakses berkas bernama\n"
+" -l,--list-signals daftar nama sinyal yang tersedia\n"
+" -m,--mount tampilkan seluruh proses menggunakan sistem berkas "
+"bernama\n"
+" atau peranti blok\n"
+" -M,--ismountpoint penuhi permintaan hanya jika NAMA adalah sebuah "
+"titik kait\n"
+" -n,--namespace RUANG cari di ruang nama ini (berkas, udp, atau tcp)\n"
+" -s,--silent beroperasi secara sunyi\n"
+" -SIGNAL kirim sinyal ini daripada SIGKILL\n"
+" -u,--user tampilkan ID pengguna\n"
+" -v,--verbose keluaran ramai\n"
+" -w,--writeonly hanya matikan proses dengan akses tulis\n"
+" -V,--version tampilkan informasi versi\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 cari di socket IPv4 saja\n"
+" -6,--ipv6 cari di socket IPv6 saja\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" nama udp/tcp: [port_lokal][,[host_jauh][,[port_jauh]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Hak Cipta (C) 1993-2022 Werner Almesberger dan Craid Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc datang dengan SECARA ABSOLUT TIDAK ADA GARANSI.\n"
+"Ini adalah aplikasi bebas, Anda diperbolehkan untuk meredistribusikannya\n"
+"di bawah ketentuan dari GNU General Public License.\n"
+"Untuk informasi mengenai masalah ini, lihat berkas bernama COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Tidak dapat membuka direktori /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Tidak dapat mengalokasikan memori untuk proc yang sesuai: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Nama berkas %s yang dispesifikasikan tidak ada.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Tidak dapat men-stat %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Tidak dapat mengurai port lokal %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Port lokal AF %d tidak diketahui\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Tidak dapat membuka berkas protokol \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Nama berkas %s yang dispesifikasikan bukan titik kait.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Opsi tidak valid %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Opsi nama ruang membutuhkan sebuah argumen."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Nama ruang tidak valid"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Anda hanya dapat menggunakan berkas dengan opsi titik kait"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Tidak ada spesifikasi proses yang diberikan"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "semua opsi tidak dapat digunakan dengan opsi silent."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"Anda tidak dapat mencari soket hanya untuk IPv4 dan hanya untuk IPv6 di "
+"waktu yang sama"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s PENGGUNA PID AKSES PERINTAH\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(tak diketahui)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Tidak dapat men-stat berkas %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Tidak dapat membuka /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Bunuh proses %d ? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Tidak dapat menghentikan proses %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Tidak dapat membuka sebuah socket jaringan.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Tidak dapat menemukan nomor perangkat socket.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Bunuh %s(%s%d) ? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Sinyal %s(%s%d) ? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Tidak dapat memperoleh UID dari status proses\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Ekspresi reguler buruk: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: melewatkan pencocokan sebagian %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Terhenti %s(%s%d) dengan sinyal %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: tidak ada proses yang ditemukan\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Penggunaan: killall [OPSI]... [--] NAMA...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact membutuhkan pencocokan tepat untuk setiap nama "
+"panjang\n"
+" -I,--ignore-case pencocokan nama proses tidak memperhatikan besar "
+"huruf\n"
+" -g,--process-group hentikan proses grup daripada proses\n"
+" -y,--younger-than hentikan proses lebih muda dari WAKTU\n"
+" -o,--older-than hentikan proses lebih tua dari WAKTU\n"
+" -i,--interactive tanya untuk konfirmasi sebelum menghentikan\n"
+" -l,--list daftar seluruh nama sinyal yang diketahui\n"
+" -q,--quiet jangan tampilkan komplain\n"
+" -r,--regexp interpretasikan NAMA sebagai sebuah ekstensi ekpresi "
+"regular\n"
+" -s,--signal SINYAL kirim sinyal ini daripada SIGTERM\n"
+" -u,--user PENGGUNA hentikan hanya proses yang berjalan sebagai PENGGUNA\n"
+" -v,--verbose laporkan jika sinyal telah secara sukses dikirimkan\n"
+" -V,--version tampilkan informasi versi\n"
+" -w,--wait tunggu untuk proses untuk mati\n"
+" -n,--ns PID cocokkan dengan proses milik ruang nama yang sama\n"
+" dengan PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP hanya hentikan proses yang memiliki konteks\n"
+" (harus mendahului argumen lain)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Format waktu tidak valid"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Tidak dapat menemukan pengguna %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "PID nama ruang tidak valid"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Ekspresi reguler buruk: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Cacah maksimal dari nama adalah %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s tidak ada entri proses (belum di-mount ?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Galat saat mencantol ke pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Hak Cipta (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Penggunaan: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean keluarkan 8 bit stream bersih.\n"
+" -n, --no-headers jangan tampilkan baca/tulis dari header "
+"fd.\n"
+" -c, --follow lihat di proses anak baru apa pun juga.\n"
+" -t, --tgid peek di semua thread dengan tgid sama "
+"dengan <pid>.\n"
+" -d, --duplicates-removed hapus duplikasi baca/tulis dari keluaran.\n"
+" -V, --version tampilkan informasi versi.\n"
+" -h, --help tampilkan bantuan ini.\n"
+"\n"
+" Tekan CTRL-C untuk mengakhiri keluaran.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Penggunaan: prstat [opsi] PID ...\n"
+" prstat -V\n"
+"Tampilkan informasi mengenai sebuah proses\n"
+" -r,--raw Tampilkan informasi mentah\n"
+" -V,--version Tampilkan informasi versi dan keluar\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2022 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Hak Cipta (C) 2009-2022 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "berjalan"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "tertidur"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "disk tidur"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "terlacak"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "paging"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "tidak diketahui"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Proses : %-14s\t\tKeadaan: %c (%s)\n"
+" CPU# : %-3d\t\tTTY: %s\tThread: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"ID Proses, Grup, dan Sesi\n"
+" ID Proses: %d\t\t ID Induk: %d\n"
+" ID Grup: %d\t\t ID Sesi: %d\n"
+" ID Grup T: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Kesalahan Page\n"
+" Proses Ini (minor major): %8lu %8lu\n"
+" Proses Anak (minor major): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Waktu CPU\n"
+" Proses Ini (pengguna sistem tamu blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Proses Anak (pengguna sistem tamu): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memori\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t Batas RSS: %s\n"
+" Awal Kode: %#-10lx\t\t Akhir Kode: %#-10lx\n"
+" Awal Stack: %#-10lx\n"
+" Penunjuk Stack (ESP): %#10lx\t Penunjuk Inst. (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Penjadwalan\n"
+" Kebijakan: %s\n"
+" Nice: %ld \t\t Prioritas RT: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf dalam print_stat gagal.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Proses dengan pid %d tidak ada.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Tidak dapat membuka stat berkas untuk pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Tidak dapat mengalokasikan memori untuk proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Tidak dapat memindai stat berkas"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Opsi tidak valid"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Anda harus menyediakan paling tidak satu PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc belum dikait, tidak bisa men-stat /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s kosong (belum di-mount ?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Cara pakai: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" atau: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Menampilkan pohon proses.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments menampilkan argumen baris perintah\n"
+" -A, --ascii gunakan karakter menggambar garis ASCII\n"
+" -c, --compact-not jangan satukan sub pohon identik\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TIPE warnai proses berdasarkan\n"
+" atribut (umur)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids tampilkan id grup proses; menyiratkan -c\n"
+" -G, --vt100 gunakan karakter menggambar garis VT100\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all sorot proses saat ini dan moyangnya\n"
+" -H PID, --highlight-pid=PID\n"
+" sorot proses ini dan moyangnya\n"
+" -l, --long jangan potong baris panjang\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort urut keluaran berdasarkan PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" urut keluaran berdasarkan tipe ruang nama ini\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids tampilkan PID; menyiratkan -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents tampilkan induk dari proses yang dipilih\n"
+" -S, --ns-changes tampilkan transisi ruang nama\n"
+" -t, --thread-names tampilkan nama-nama thread lengkap\n"
+" -T, --hide-threads sembunyikan thread, hanya tampilkan proses\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes tampilkan transisi uid\n"
+" -U, --unicode gunakan karakter menggambar garis UTF-8 (Unicode)\n"
+" -V, --version tampilkan informasi versi\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" tampilkan atribut keamanan\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID mulai dari PID ini; baku adalah 1 (init)\n"
+" PENGGUNA tampilkan hanya proses yang berakar dari pengguna ini\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM tidak diset\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Tidka dapat memperoleh kapabilitas terminal\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "berkas procfs bagi ruang nama %s tidak tersedia\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Tidak ada nama pengguna seperti itu: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Proses %d tidak ditemukan.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Tidak ada proses yang ditemukan.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Tekan Enter untuk menutup\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: sinyal tidak diketahui; %s -l daftar sinyal.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Hak Cipta (C) 1993-2021 Werner Almesberger dan Craig Small\n"
+#~ "\n"
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 0000000..ceeebb9
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,28 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Written by Bruno Haible <bruno@clisp.org>, 2001.
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to use, copy, distribute, and modify it.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644
index 0000000..a1fc580
--- /dev/null
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..526920b
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,810 @@
+# Italian messages for psmisc.
+# Copyright (C) 2001, 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Daniele Pagano <esaurito@users.sourceforge.net>, 2001.
+# Marco Colombo <m.colombo@ed.ac.uk>, 2005, 2006, 2007, 2009, 2010, 2013, 2015.
+# Francesco Groccia <fg@snopyta.org>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.3\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2020-03-09 15:55+0100\n"
+"Last-Translator: Francesco Groccia <fg@snopyta.org>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Uso: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n CONTESTO]\n"
+" [-k [-i] [-SIGNALE]] NOME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Mostra quali processi stanno usando un certo file, socket o filesystem.\n"
+"\n"
+" -a,--all mostra anche i file inutilizzati\n"
+" -i,--interactive conferma prima di terminare (ignorato senza -k)\n"
+" -I,--inode usa sempre gli inode per confrontare i file\n"
+" -k,--kill termina i processi che accedono al file specificato\n"
+" -l,--list-signals elenca i nomi dei segnali disponibili\n"
+" -m,--mount mostra tutti i processi che usano i filesystem o i\n"
+" dispositivi a blocchi specificati\n"
+" -M,--ismountpoint soddisfa la richiesta solo se NOME è un mount point\n"
+" -n,--namespace SPACE cerca nel CONTESTO specificato (file, udp, o tcp)\n"
+" -s,--silent opera silenziosamente\n"
+" -SIGNAL invia il segnale indicato invece di SIGKILL\n"
+" -u,--user mostra gli ID utente\n"
+" -v,--verbose output prolisso\n"
+" -w,--writeonly termina solo i processi con accesso alla scrittura\n"
+" -V,--version mostra le informazioni sulla versione\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 cerca solo socket IPv4\n"
+" -6,--ipv6 cerca solo socket IPv6\n"
+
+#: src/fuser.c:170
+#, fuzzy, c-format
+#| msgid ""
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" - reimposta le opzioni\n"
+"\n"
+" nomi udp/tcp: [porta locale][,[host remoto][,[porta remota]]]\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2017 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2017 Werner Almesberger e Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc è distribuito senza ALCUNA GARANZIA.\n"
+"Questo è software libero, ed è possibile redistribuirlo secondo i termini\n"
+"della GNU General Public License.\n"
+"Si consulti il file COPYING per ulteriori informazioni.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Impossibile aprire la directory /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Impossibile allocare memoria per il processo corrispondente: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Il file indicato %s non esiste.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Impossibile fare stat di %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Impossibile risolvere la porta locale %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Porta locale AF %d sconosciuta\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Impossibile aprire il file di protocollo \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Il file indicato %s non è un mount point.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Opzione %s non valida\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "L'opzione di contesto richiede un argomento."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Nome di contesto non valido"
+
+# NdT: dato che non so come tradurre "mounpoint option", uso -m
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Con l'opzione -m si possono specificare solo file"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Nessun tipo di processo specificato"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "L'opzione -a non può essere usata con l'opzione -s."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"Impossibile cercare solo socket IPv4 e solo socket IPv6 allo stesso tempo"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s UTENTE PID ACCESSO COMANDO\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(sconosciuto)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Impossibile fare stat del file %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Impossibile aprire /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Terminare il processo %d? (s/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Impossibile terminare il processo %d: %s\n"
+
+# FIXME
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Impossibile aprire un socket di rete.\n"
+
+# FIXME
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Impossibile trovare il numero di dispositivo del socket.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Terminare %s(%s%d)? (s/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Segnale %s(%s%d)? (s/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Impossibile ottenere l'UID dallo stato del processo\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Espressione regolare non valida: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: ignorata corrispondenza parziale %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Terminato %s(%s%d) con segnale %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: nessun processo trovato\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Uso: killall [OPZIONE]... [--] NOME...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact richiede una corrispondenza esatta per i nomi molto "
+"lunghi\n"
+" -I,--ignore-case ignora maiuscole/minuscole nei nomi\n"
+" -g,--process-group termina il gruppo di processi invece del processo\n"
+" -y,--younger-than termina i processi più recenti di ORARIO\n"
+" -o,--older-than termina i processi più vecchi di ORARIO\n"
+" -i,--interactive chiede conferma prima di terminare\n"
+" -l,--list elenca i nomi di segnale conosciuti\n"
+" -q,--quiet non visualizzare commenti\n"
+" -r,--regexp interpreta NOME come un'espressione regolare estesa\n"
+" -s,--signal SEGNALE invia il segnale indicato invece di SIGTERM\n"
+" -u,--user UTENTE termina solo i processi eseguiti dall'UTENTE\n"
+" -v,--verbose riporta se il segnale è stato inviato con successo\n"
+" -V,--version mostra le informazioni sulla versione\n"
+" -w,--wait aspetta la terminazione del processo\n"
+" -n,--ns PID agisce su processi che appartengono allo stesso spazio "
+"dei nomi\n"
+" di PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP termina solo i processi aventi context\n"
+" (deve precedere altri argomenti)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Formato orario non valido"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Impossibile trovare l'utente %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "PID del nome di contesto non valido"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Espressione regolare non valida: %s\n"
+
+# killall: %s è vuoto (non montato?)
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Il massimo numero di nomi è %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s non ha una voce di processo (non montato?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Errore nel collegarsi al pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+#| " -8, --eight-bit-clean emetti output pulito a 8 bit.\n"
+#| " -n, --no-headers don't display read/write from fd "
+#| "headers.\n"
+#| " -c, --follow peek at any new child processes too.\n"
+#| " -t, --tgid peek at all threads where tgid equals "
+#| "<pid>.\n"
+#| " -d, --duplicates-removed remove duplicate read/writes from the "
+#| "output.\n"
+#| " -V, --version prints version info.\n"
+#| " -h, --help prints this help.\n"
+#| "\n"
+#| " Press CTRL-C to end output.\n"
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers non mostrare letture/scritture dalle "
+"intestazioni del fd.\n"
+" -c, --follow esamina anche ogni nuovo processo figlio.\n"
+" -t, --tgid esamina tutti i thread dove il tgid è "
+"uguale a <pid>.\n"
+" -d, --duplicates-removed rimuove dall'output le letture/scritture "
+"duplicate.\n"
+" -V, --version stampa le informazioni sulla versione.\n"
+" -h, --help stampa questo aiuto.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Uso: prtstat [opzioni] PID ...\n"
+" prtstat -V\n"
+"Stampa informazioni su un processo\n"
+" -r,--raw Mostra informazioni grezze\n"
+" -V,--version Mostra le informazioni sulla versione ed esce\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2017 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2017 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "in esecuzione"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "in attesa"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "in attesa del disco"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "tracciato"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "paging"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Processo: %-14s\t\tStato: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+
+# FIXME
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"ID di processo, gruppo e sessione\n"
+" ID Processo: %d\t\t ID Parent: %d\n"
+" ID Gruppo: %d\t\tID Sessione: %d\n"
+" ID Gruppo T: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Errori di pagina (page faults)\n"
+" Questo processo (minore maggiore): %8lu %8lu\n"
+" Processi figli (minore maggiore): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Utilizzo temporale CPU\n"
+" Questo processo (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Processi figli (user system guest): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memoria\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf in print_stat non riuscito.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Il processo con pid %d non esiste.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Impossibile aprire il file di stat per il pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Impossibile allocare memoria per proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Impossibile analizzare il file di stat"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Opzione non valida"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Occorre indicare almeno un PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc non è montato, impossibile fare stat di /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s è vuoto (non montato?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Uso: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N tipo ]\n"
+" [ -A | -G | -U ] [ PID | UTENTE ]\n"
+" oppure: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Mostra l'albero dei processi.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments mostra gli argomenti della riga di comando\n"
+" -A, --ascii usa i caratteri grafici ASCII\n"
+" -c, --compact-not non comprimere i sotto alberi identici\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TIPO processo del colore dall'attributo\n"
+" (età)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids mostra gli identificativi del gruppo di processo; "
+"implica -c\n"
+" -G, --vt100 usa i caratteri grafici di VT100\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all evidenzia il processo corrente e i suoi antenati\n"
+" -H PID, --highlight-pid=PID\n"
+" evidenzia questo processo e i suoi antenati\n"
+" -l, --long non troncare le linee lunghe\n"
+
+#: src/pstree.c:1309
+#, fuzzy, c-format
+#| msgid ""
+#| " -n, --numeric-sort sort output by PID\n"
+#| " -N TYPE, --ns-sort=TYPE\n"
+#| " sort output by this namespace type\n"
+#| " (cgroup, ipc, mnt, net, pid, user, uts)\n"
+#| " -p, --show-pids show PIDs; implies -c\n"
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort ordina l'output in base al PID\n"
+" -N TIPO, --ns-sort=TIPO\n"
+" ordina l'output in base al tipo di contesto\n"
+" (cgroup, ipc, mnt, net, pid, user, uts)\n"
+" -p, --show-pids mostra i PID; implica -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents mostra i genitori del processo selezionato\n"
+" -S, --ns-changes mostra le transizioni del contesto\n"
+" -t, --thread-names mostra i nomi completi del thread\n"
+" -T, --hide-threads nascondi i thread, mostra solo i processi\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes mostra l'uid delle transitions\n"
+" -U, --unicode usa i caratteri grafici di UTF-8 (Unicode)\n"
+" -V, --version visualizza le informazioni sulla versione\n"
+
+#: src/pstree.c:1324
+#, fuzzy, c-format
+#| msgid ""
+#| " -Z, --security-context\n"
+#| " show SELinux security contexts\n"
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" mostra i contesti di sicurezza SELinux\n"
+
+#: src/pstree.c:1326
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| " PID start at this PID; default is 1 (init)\n"
+#| " USER show only trees rooted at processes of this user\n"
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID comincia dal pid indicato, predefinito 1 (init)\n"
+" UTENTE mostra solo gli alberi con radice nei processi di questo "
+"utente\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM non è impostato\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Impossibile determinare le capacità del terminale\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "file procfs per il contesto %s non disponibile\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Questo nome utente non esiste: %s\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+#| msgid "No processes found.\n"
+msgid "Process %d not found.\n"
+msgstr "Nessun processo trovato.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Nessun processo trovato.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Premere Invio per chiudere\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: segnale sconosciuto; usare %s -l per elencare i segnali.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Usage: killall [ -Z CONTESTO ] [ -u UTENTE ] [ -y ORARIO ] [ -o ORARIO] "
+#~ "[ -eIgiqrvw ]\n"
+#~ " [ -s SEGNALE | -SEGNALE ] NAME...\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N tipo ]\n"
+#~ " [ -A | -G | -U ] [ PID | UTENTE ]\n"
+#~ " oppure: pstree -V\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger e Craig Small\n"
+#~ "\n"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644
index 0000000..7ecf8d9
--- /dev/null
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..66d4ad8
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,821 @@
+# Japanese messages for psmisc.
+# Copyright (C) 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Goto, Masanori <gotom@debian.or.jp>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 22.2pre1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2006-03-20 10:31+0900\n"
+"Last-Translator: GOTO Masanori <gotom@debian.or.jp>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-JP\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: src/fuser.c:146
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] "
+#| "NAME...\n"
+#| " [ - ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...\n"
+#| " fuser -l\n"
+#| " fuser -V\n"
+#| "Show which processes use the named files, sockets, or filesystems.\n"
+#| "\n"
+#| " -a display unused files too\n"
+#| " -c mounted FS\n"
+#| " -f silently ignored (for POSIX compatibility)\n"
+#| " -i ask before killing (ignored without -k)\n"
+#| " -k kill processes accessing the named file\n"
+#| " -l list available signal names\n"
+#| " -m show all processes using the named filesystems\n"
+#| " -n SPACE search in this name space (file, udp, or tcp)\n"
+#| " -s silent operation\n"
+#| " -SIGNAL send this signal instead of SIGKILL\n"
+#| " -u display user IDs\n"
+#| " -v verbose output\n"
+#| " -V display version information\n"
+#| " -4 search IPv4 sockets only\n"
+#| " -6 search IPv6 sockets only\n"
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"»ÈÍÑË¡: fuser [ -a | -s | -c ] [ -n SPACE ] [ -¥·¥°¥Ê¥ë ] [ -kimuv ] ̾"
+"Á°...\n"
+" [ - ] [ -n SPACE ] [ -¥·¥°¥Ê¥ë ] [ -kimuv ] ̾Á°...\n"
+" fuser -l\n"
+" fuser -V\n"
+"¥Õ¥¡¥¤¥ë̾¡¦¥½¥±¥Ã¥È¡¦¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¤É¤Î¥×¥í¥»¥¹¤¬»ÈÍѤ·¤Æ¤¤¤ë¤«¤òɽ¼¨\n"
+"\n"
+" -a ¥×¥í¥»¥¹¤«¤é»²¾È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Õ¥¡¥¤¥ë¤âɽ¼¨ÂоݤȤ¹¤ë\n"
+" -c -m¥ª¥×¥·¥ç¥ó¤ËƱ¤¸ (POSIX¸ß´¹À­¤Î¤¿¤á¤À¤±¤Ë¸ºß)\n"
+" -f ¤Ä¤±¤Æ¤â̵»ë¤µ¤ì¤ë (POSIX¸ß´¹À­¤Î¤¿¤á¤À¤±¤Ë¸ºß)\n"
+" -i kill¤¹¤ëÁ°¤Ë³Îǧ¤òµá¤á¤ë (-k¥ª¥×¥·¥ç¥ó¤ò¤Ä¤±¤Ê¤¤¤È¤­¤Ï̵»ë¤µ¤ì"
+"¤ë)\n"
+" -k »ØÄꤷ¤¿¥Õ¥¡¥¤¥ë¤Ë¥¢¥¯¥»¥¹¤·¤Æ¤¤¤ë¥×¥í¥»¥¹¤òkill¤¹¤ë\n"
+" -l ÍøÍѲÄǽ¤Ê¥·¥°¥Ê¥ë̾¤ò¤¹¤Ù¤Æɽ¼¨¤¹¤ë\n"
+" -m »ØÄê¥Õ¥¡¥¤¥ë¾å¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò»ÈÍѤ¹¤ëÁ´¥×¥í¥»¥¹¤òɽ¼¨¤¹"
+"¤ë\n"
+" -n SPACE ̾Á°¶õ´Ö¤È¤·¤ÆSPACE(file, udp, ¤Þ¤¿¤Ï tcp ¤Î¤É¤ì¤«)¤ò»ØÄꤹ"
+"¤ë \n"
+" -s ɽ¼¨¤òÍÞÀ©¤¹¤ë\n"
+" -¥·¥°¥Ê¥ë SIGKILL¤ÎÂå¤ê¤Ë»ØÄꤷ¤¿¥·¥°¥Ê¥ë¤òÁ÷¤ë\n"
+" -u ¥æ¡¼¥¶ID¤òɽ¼¨¤¹¤ë\n"
+" -v ¾éĹɽ¼¨¤ò¹Ô¤¦\n"
+" -V ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤¹¤ë\n"
+" -4 IPv4¥½¥±¥Ã¥È¤Î¤ß¸¡º÷¤¹¤ë\n"
+" -6 IPv6¥½¥±¥Ã¥È¤Î¤ß¸¡º÷¤¹¤ë\n"
+" - ¥ê¥»¥Ã¥È¥ª¥×¥·¥ç¥ó\n"
+"\n"
+" udp/tcp ̾Á°: [¥í¡¼¥«¥ë¥Ý¡¼¥È][,[¥ê¥â¡¼¥È¥Û¥¹¥È][,[¥ê¥â¡¼¥È¥Ý¡¼¥È]]]\n"
+"\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc¤Ï´°Á´¤Ë̵ÊݾڤǤ¹\n"
+"¤³¤ì¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹¡£GNU°ìÈ̸ø½°ÍøÍѵöÂú·ÀÌó½ñ¤Î¾ò¹à¤Ë´ð¤Å¤¤¤Æ\n"
+"ºÆÇÛÉÛ¤ò¼«Í³¤Ë¹Ô¤Ã¤Æ¤«¤Þ¤¤¤Þ¤»¤ó¡£\n"
+"¤³¤ì¤é¤Ë¤Ä¤¤¤Æ¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤ÏCOPYING¥Õ¥¡¥¤¥ë¤ò¤´Í÷²¼¤µ¤¤¡£\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "/proc ¥Ç¥£¥ì¥¯¥È¥ê¤ò³«¤±¤Þ¤»¤ó: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "°ìÃפ·¤¿¥×¥í¥»¥¹¤ËÂФ¹¤ë¥á¥â¥ê¤¬³ÍÆÀ¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr ""
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "%s ¤òstat¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "¥í¡¼¥«¥ë¥Ý¡¼¥È %s ¤ò²ò·è¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "̤ÃÎ¤Î¥í¡¼¥«¥ë¥Ý¡¼¥È AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "¥×¥í¥È¥³¥ë¥Õ¥¡¥¤¥ë \"%s\" ¤¬³«¤±¤Þ¤»¤ó: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr ""
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr ""
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "̾Á°¶õ´Ö¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤¬É¬ÍפǤ¹"
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "ÉÔÀµ¤Ê̾Á°¶õ´Ö̾"
+
+#: src/fuser.c:1309
+#, fuzzy
+#| msgid "You can only use files with mountpoint option"
+msgid "You can only use files with mountpoint options"
+msgstr ""
+"¥Þ¥¦¥ó¥È¥Ý¥¤¥ó¥È¥ª¥×¥·¥ç¥ó(-m¤Þ¤¿¤Ï-c)¤È°ì½ï¤Ë»È¤¨¤ë¤Î¤Ïfile̾Á°¶õ´Ö¤Î¤ß¤Ç¤¹"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "°ú¿ô¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "-a¥ª¥×¥·¥ç¥ó¤Ï-s¥ª¥×¥·¥ç¥ó¤È°ì½ï¤Ë¤Ï»ÈÍѤǤ­¤Þ¤»¤ó"
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "-4¥ª¥×¥·¥ç¥ó¤È-6¥ª¥×¥·¥ç¥ó¤ÏƱ»þ¤Ë»ØÄê¤Ç¤­¤Þ¤»¤ó"
+
+#: src/fuser.c:1474
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%*s USER PID ACCESS COMMAND\n"
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr ""
+"\n"
+"%*s ¥æ¡¼¥¶ PID ¥¢¥¯¥»¥¹ ¥³¥Þ¥ó¥É\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(ÉÔÌÀ)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "¥Õ¥¡¥¤¥ë¤òstat¤Ç¤­¤Þ¤»¤ó %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "/proc/net/unix ¤¬³«¤±¤Þ¤»¤ó: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "¥×¥í¥»¥¹ %d ¤òkill¤·¤Þ¤¹¤«? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "¥×¥í¥»¥¹ %d ¤ò kill ¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "¥Í¥Ã¥È¥ï¡¼¥¯¥½¥±¥Ã¥È¤¬³«¤±¤Þ¤»¤ó.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "¥½¥±¥Ã¥È¤Î¥Ç¥Ð¥¤¥¹Èֹ椬¸«¤Ä¤«¤ê¤Þ¤»¤ó.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "%s(%s%d) ¤òkill¤·¤Þ¤¹¤«? (y/N)"
+
+#: src/killall.c:114
+#, fuzzy, c-format
+#| msgid "Kill %s(%s%d) ? (y/N) "
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "%s(%s%d) ¤òkill¤·¤Þ¤¹¤«? (y/N)"
+
+#: src/killall.c:262
+#, fuzzy, c-format
+#| msgid "Cannot get UID from process status\n"
+msgid "killall: Cannot get UID from process status\n"
+msgstr "¥×¥í¥»¥¹¤Î¸½ºß¾õÂÖ¤«¤éUID¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿\n"
+
+#: src/killall.c:368
+#, fuzzy, c-format
+#| msgid "Bad regular expression: %s\n"
+msgid "killall: Bad regular expression: %s\n"
+msgstr "ÉÔÀµ¤ÊÀµµ¬É½¸½: %s\n"
+
+#: src/killall.c:525
+#, fuzzy, c-format
+#| msgid "skipping partial match %s(%d)\n"
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "Éôʬ°ìÃפò¥¹¥­¥Ã¥× %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d) ¤ò¥·¥°¥Ê¥ë %d ¤Çkill¤·¤Þ¤·¤¿\n"
+
+#: src/killall.c:796
+#, fuzzy, c-format
+#| msgid "%s: no process killed\n"
+msgid "%s: no process found\n"
+msgstr "%s: ¤É¤Î¥×¥í¥»¥¹¤âkill¤µ¤ì¤Þ¤»¤ó¤Ç¤·¤¿\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "»ÈÍÑË¡: killall [¥ª¥×¥·¥ç¥ó]... [--] ̾Á°...\n"
+
+#: src/killall.c:839
+#, fuzzy, c-format
+#| msgid ""
+#| " killall -l, --list\n"
+#| " killall -V, --version\n"
+#| "\n"
+#| " -e,--exact require exact match for very long names\n"
+#| " -I,--ignore-case case insensitive process name match\n"
+#| " -g,--process-group kill process group instead of process\n"
+#| " -i,--interactive ask for confirmation before killing\n"
+#| " -l,--list list all known signal names\n"
+#| " -q,--quiet don't print complaints\n"
+#| " -r,--regexp interpret NAME as an extended regular expression\n"
+#| " -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+#| " -u,--user USER kill only process(es) running as USER\n"
+#| " -v,--verbose report if the signal was successfully sent\n"
+#| " -V,--version display version information\n"
+#| " -w,--wait wait for processes to die\n"
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact ¤È¤Æ¤âŤ¤Ì¾Á°¤ËÂФ·¤Æ´°Á´°ìÃפòÍ׵᤹¤ë\n"
+" -I,--ignore-case ¥×¥í¥»¥¹Ì¾¤Î°ìÃפÏÂçʸ»ú¤Î¾®Ê¸»ú¶èÊ̤ʤ¯¹Ô¤¦\n"
+" -g,--process-group ¥×¥í¥»¥¹¤ÎÂå¤ê¤Ë¥×¥í¥»¥¹¥°¥ë¡¼¥×¤Ë¥·¥°¥Ê¥ë¤òÁ÷¤ë\n"
+" -i,--interactive kill ¤¹¤ëÁ°¤Ë³Îǧ¤òµá¤á¤ë\n"
+" -l,--list ´ûÃΤΥ·¥°¥Ê¥ë̾¤ò¤¹¤Ù¤Æɽ¼¨¤¹¤ë\n"
+" -q,--quiet kill ¤¹¤ë¥×¥í¥»¥¹¤¬¤Ê¤¤¾ì¹ç¤Ëɽ¼¨¤ò¹Ô¤ï¤Ê¤¤\n"
+" -r,--regexp »ØÄꤷ¤¿Ì¾Á°¤ò³ÈÄ¥Àµµ¬É½¸½¤È¤·¤Æ²ò¼á¤¹¤ë\n"
+" -s,--signal ¥·¥°¥Ê¥ë SIGTERM¤ÎÂå¤ê¤Ë»ØÄꤷ¤¿¥·¥°¥Ê¥ë¤òÁ÷¤ë\n"
+" -u,--user ¥æ¡¼¥¶ »ØÄꤷ¤¿¥æ¡¼¥¶¤ÇÁö¹Ô¤¹¤ë¥×¥í¥»¥¹¤Î¤ßkill¤¹¤ë\n"
+" -v,--verbose ¥·¥°¥Ê¥ë¤ÎÁ÷¿®¤ËÀ®¸ù¤·¤¿¤éÊó¹ð¤¹¤ë\n"
+" -V,--version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤¹¤ë\n"
+" -w,--wait kill¤·¤¿¥×¥í¥»¥¹¤¬½ªÎ»¤¹¤ë¤Þ¤ÇÂÔ¤Ä\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context Àµµ¬É½¸½ ¥³¥ó¥Æ¥­¥¹¥È¤ò»ý¤Ä¥×¥í¥»¥¹¤Î¤ßkill¤¹¤ë\n"
+" (¾¤Î°ú¿ô¤è¤ê¤âÁ°¤Ë»ØÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr ""
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "¥æ¡¼¥¶ %s ¤òȯ¸«¤Ç¤­¤Þ¤»¤ó\n"
+
+#: src/killall.c:1016
+#, fuzzy
+#| msgid "Invalid namespace name"
+msgid "Invalid namespace PID"
+msgstr "ÉÔÀµ¤Ê̾Á°¶õ´Ö̾"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "ÉÔÀµ¤ÊÀµµ¬É½¸½: %s\n"
+
+#: src/killall.c:1057
+#, fuzzy, c-format
+#| msgid "Maximum number of names is %d\n"
+msgid "killall: Maximum number of names is %d\n"
+msgstr "̾Á°¤ÎºÇÂç»ØÄê²Äǽ¿ô¤Ï %d\n"
+
+#: src/killall.c:1062
+#, fuzzy, c-format
+#| msgid "%s is empty (not mounted ?)\n"
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "%s ¤Ï¶õ¥Ç¥£¥ì¥¯¥È¥ê (¥Þ¥¦¥ó¥È¤µ¤ì¤Æ¤¤¤Ê¤¤?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr ""
+
+#: src/peekfd.c:191
+#, fuzzy, c-format
+#| msgid "pstree (PSmisc) %s\n"
+msgid "peekfd (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+
+#: src/prtstat.c:65
+#, fuzzy, c-format
+#| msgid "pstree (PSmisc) %s\n"
+msgid "prtstat (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr ""
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr ""
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr ""
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr ""
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr ""
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr ""
+
+#: src/prtstat.c:90
+#, fuzzy
+#| msgid "(unknown)"
+msgid "unknown"
+msgstr "(ÉÔÌÀ)"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr ""
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr ""
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr ""
+
+#: src/prtstat.c:243
+#, fuzzy, c-format
+#| msgid "Cannot allocate memory for matched proc: %s\n"
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "°ìÃפ·¤¿¥×¥í¥»¥¹¤ËÂФ¹¤ë¥á¥â¥ê¤¬³ÍÆÀ¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr ""
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr ""
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr ""
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s ¤Ï¶õ¥Ç¥£¥ì¥¯¥È¥ê (¥Þ¥¦¥ó¥È¤µ¤ì¤Æ¤¤¤Ê¤¤?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+
+#: src/pstree.c:1326
+#, fuzzy, c-format
+#| msgid ""
+#| " PID start at this PID; default is 1 (init)\n"
+#| " USER show only trees rooted at processes of this user\n"
+#| "\n"
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+" PID »ØÄꤷ¤¿PID¤«¤éɽ¼¨³«»Ï¤·¤Þ¤¹; ¥Ç¥Õ¥©¥ë¥È¤Ï 1 (init)\n"
+" ¥æ¡¼¥¶Ì¾ »ØÄꤷ¤¿¥æ¡¼¥¶¤È¤·¤ÆÆ°ºî¤¹¤ë¥×¥í¥»¥¹¤«¤éÇÉÀ¸¤¹¤ë¥Ä¥ê¡¼¤Î¤ßɽ¼¨\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "üËö¤Îµ¡Ç½¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr ""
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "»ØÄê¥æ¡¼¥¶Ì¾¤Ï¸ºß¤·¤Þ¤»¤ó: %s\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+#| msgid "No processes found.\n"
+msgid "Process %d not found.\n"
+msgstr "¥×¥í¥»¥¹¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "¥×¥í¥»¥¹¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤¹¤ÈÊĤ¸¤Þ¤¹\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: ̤ÃΤΥ·¥°¥Ê¥ë; %s -l ¤Ë¤è¤Ã¤Æ¥·¥°¥Ê¥ë¤ò°ìÍ÷ɽ¼¨¤·¤Þ¤¹\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "»ÈÍÑË¡: pidof [ -eg ] ¥×¥í¥»¥¹Ì¾...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e ¤È¤Æ¤âŤ¤¥×¥í¥»¥¹Ì¾¤ËÂФ·¤Æ´°Á´°ìÃפòÍ׵᤹¤ë\n"
+#~ " ¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬ÍøÍѤǤ­¤Ê¤¤¾ì¹ç¤Ï³ºÅö¥×¥í¥»¥¹¤Ï¥¹¥­¥Ã¥×¤µ¤ì"
+#~ "¤ë\n"
+#~ " -g ¥×¥í¥»¥¹ID¤ÎÂå¤ê¤Ë¥×¥í¥»¥¹¥°¥ë¡¼¥×ID¤òɽ¼¨¤¹¤ë\n"
+#~ " -V ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤¹¤ë\n"
+#~ "\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "»ÈÍÑË¡: killall [-Z CONTEXT] [-u ¥æ¡¼¥¶¡¼] [ -eIgiqrvw ] [ -¥·¥°¥Ê¥ë ] ̾"
+#~ "Á°...\n"
+
+#, c-format
+#~ msgid "Cannot stat mount point %s: %s\n"
+#~ msgstr "¥Þ¥¦¥ó¥È¥Ý¥¤¥ó¥È %s ¤òstat¤Ç¤­¤Þ¤»¤ó: %s\n"
+
+#~ msgid "You cannot use the mounted and mountpoint flags together"
+#~ msgstr "-m¥ª¥×¥·¥ç¥ó¤È-c¥ª¥×¥·¥ç¥ó¤ÏƱ»þ¤Ë¤Ï»È¤¨¤Þ¤»¤ó"
+
+#, c-format
+#~ msgid "Cannot open /etc/mtab: %s\n"
+#~ msgstr "/etc/mtab ¤¬³«¤±¤Þ¤»¤ó: %s\n"
+
+#, c-format
+#~ msgid "Internal error: MAX_DEPTH not big enough.\n"
+#~ msgstr "ÆâÉô¥¨¥é¡¼: MAX_DEPTH ¤¬½½Ê¬Â礭¤¯¤¢¤ê¤Þ¤»¤ó.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -u ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a show command line arguments\n"
+#~ " -A use ASCII line drawing characters\n"
+#~ " -c don't compact identical subtrees\n"
+#~ " -h highlight current process and its ancestors\n"
+#~ " -H PID highlight this process and its ancestors\n"
+#~ " -G use VT100 line drawing characters\n"
+#~ " -l don't truncate long lines\n"
+#~ " -n sort output by PID\n"
+#~ " -p show PIDs; implies -c\n"
+#~ " -u show uid transitions\n"
+#~ " -U use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V display version information\n"
+#~ msgstr ""
+#~ "»ÈÍÑË¡: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -u ]\n"
+#~ " [ -A | -G | -U ] [ PID | ¥æ¡¼¥¶Ì¾ ]\n"
+#~ " pstree -V\n"
+#~ "¥×¥í¥»¥¹¥Ä¥ê¡¼¤òɽ¼¨¤¹¤ë¡£\n"
+#~ "\n"
+#~ " -a ¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤âɽ¼¨\n"
+#~ " -A ASCII ʸ»ú¤ò·ÓÀþɽ¼¨¤Ë»ÈÍÑ\n"
+#~ " -c Ʊ¤¸ÆâÍƤΥµ¥Ö¥Ä¥ê¡¼¤ò¤Þ¤È¤á¤Æû¤¯É½¼¨¤·¤Ê¤¤\n"
+#~ " -h ¸½ºß¤Î¥×¥í¥»¥¹¤È¤½¤ÎÀèÁÄ¤Î¥×¥í¥»¥¹¤ò¶¯Ä´É½¼¨¤¹¤ë\n"
+#~ " -H PID »ØÄê¥×¥í¥»¥¹PID¤È¤½¤ÎÀèÁÄ¤Î¥×¥í¥»¥¹¤ò¶¯Ä´É½¼¨¤¹¤ë\n"
+#~ " -G VT100 ·ÓÀþʸ»ú¤òɽ¼¨¤Ë»ÈÍÑ\n"
+#~ " -l Ť¤¹Ô¤òɽ¼¨¤·¡¢ÅÓÃæ¤ÇÂǤÁÀÚ¤ê¤Þ¤»¤ó\n"
+#~ " -n PID¤Ç¥½¡¼¥È¤·¤Æɽ¼¨\n"
+#~ " -p PID¤âɽ¼¨; -c¥ª¥×¥·¥ç¥ó¤ò¤Ä¤±¤ë¸ú²Ì¤ò´Þ¤ß¤Þ¤¹\n"
+#~ " -u UID¤ÎÁ«°Ü¾õ¶·¤òɽ¼¨¤¹¤ë\n"
+#~ " -U UTF-8 (Unicode) ʸ»ú¤ò·ÓÀþɽ¼¨¤Ë»ÈÍÑ\n"
+#~ " -V ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨\n"
+
+#, c-format
+#~ msgid " -Z show SELinux security contexts\n"
+#~ msgstr " -Z SELinux¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È¤òɽ¼¨¤¹¤ë\n"
+
+#~ msgid "Cannot open protocol file \"%s\": %s"
+#~ msgstr "¥×¥í¥È¥³¥ë¥Õ¥¡¥¤¥ë \"%s\" ¤¬³«¤±¤Þ¤»¤ó: %s"
diff --git a/po/ka.gmo b/po/ka.gmo
new file mode 100644
index 0000000..fe69ca1
--- /dev/null
+++ b/po/ka.gmo
Binary files differ
diff --git a/po/ka.po b/po/ka.po
new file mode 100644
index 0000000..8a797d3
--- /dev/null
+++ b/po/ka.po
@@ -0,0 +1,767 @@
+# psmisc Georgian translation.
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.5rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2022-10-17 07:37+0200\n"
+"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
+"Language-Team: Georgian <(nothing)>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 3.1.1\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"გáƒáƒ›áƒáƒ§áƒ”ნებáƒ: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-სიგნáƒáƒšáƒ˜]] სáƒáƒ®áƒ”ლი...\n"
+" fuser -ლ\n"
+" ფუზერი -V\n"
+"áƒáƒ©áƒ•áƒ”ნეთ რáƒáƒ›áƒ”ლი პრáƒáƒªáƒ”სები იყენებენ დáƒáƒ¡áƒáƒ®áƒ”ლებულ ფáƒáƒ˜áƒšáƒ”ბს, სáƒáƒ™áƒ”ტებს áƒáƒœ ფáƒáƒ˜áƒšáƒ£áƒ  "
+"სისტემáƒáƒ¡.\n"
+"\n"
+" -a,--ყველრáƒáƒ©áƒ•áƒ”ნებს გáƒáƒ›áƒáƒ£áƒ§áƒ”ნებელ ფáƒáƒ˜áƒšáƒ”ბსáƒáƒª\n"
+" -i,--ინტერáƒáƒ¥áƒ¢áƒ˜áƒ£áƒšáƒ˜ კითხვრმáƒáƒ™áƒ•áƒšáƒ˜áƒ¡ წინ (იგნáƒáƒ áƒ˜áƒ áƒ”ბულირ-k-ის გáƒáƒ áƒ”შე)\n"
+" -I,--inode ყáƒáƒ•áƒ”ლთვის იყენებს ინáƒáƒ“ებს ფáƒáƒ˜áƒšáƒ”ბის შესáƒáƒ“áƒáƒ áƒ”ბლáƒáƒ“\n"
+" -k,--kill kill პრáƒáƒªáƒ”სების წვდáƒáƒ›áƒ დáƒáƒ¡áƒáƒ®áƒ”ლებულ ფáƒáƒ˜áƒšáƒ–ე\n"
+" -l,--list-სიგნáƒáƒšáƒ”ბის სირხელმისáƒáƒ¬áƒ•áƒ“áƒáƒ›áƒ˜ სიგნáƒáƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლები\n"
+" -m,--mount áƒáƒ©áƒ•áƒ”ნებს ყველრპრáƒáƒªáƒ”სს დáƒáƒ¡áƒáƒ®áƒ”ლებული ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემების "
+"გáƒáƒ›áƒáƒ§áƒ”ნებით áƒáƒœ\n"
+" დáƒáƒ‘ლáƒáƒ™áƒ•áƒ˜áƒ¡ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ\n"
+" -M,--ismountpoint შეáƒáƒ¡áƒ áƒ£áƒšáƒáƒ¡ მáƒáƒ—ხáƒáƒ•áƒœáƒ მხáƒáƒšáƒáƒ“ იმ შემთხვევáƒáƒ¨áƒ˜, თუ NAME áƒáƒ áƒ˜áƒ¡ "
+"სáƒáƒ›áƒáƒœáƒ¢áƒáƒŸáƒ წერტილი\n"
+" -n,--namespace SPACE ძიებრáƒáƒ› სáƒáƒ®áƒ”ლის სივრცეში (ფáƒáƒ˜áƒšáƒ˜, udp áƒáƒœ tcp)\n"
+" -s,--ჩუმი ჩუმი áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ\n"
+" -SIGNAL გáƒáƒ’ზáƒáƒ•áƒœáƒ”თ ეს სიგნáƒáƒšáƒ˜ SIGKILL-ის ნáƒáƒªáƒ•áƒšáƒáƒ“\n"
+" -u,--მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის ჩვენებრმáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის ID\n"
+" -v, - სიტყვიერი სიტყვიერი გáƒáƒ›áƒáƒ›áƒáƒ•áƒáƒšáƒ˜\n"
+" -w,-- ჩáƒáƒ¬áƒ”რე მხáƒáƒšáƒáƒ“ ჩáƒáƒ¬áƒ”რის წვდáƒáƒ›áƒ˜áƒ¡ მქáƒáƒœáƒ” პრáƒáƒªáƒ”სების მáƒáƒ™áƒ•áƒšáƒ\n"
+" -V, ---ვერსიის ჩვენებრვერსიის ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 მáƒáƒ«áƒ”ბნეთ მხáƒáƒšáƒáƒ“ IPv4 სáƒáƒ™áƒ”ტები\n"
+" -6,--ipv6 მáƒáƒ«áƒ”ბნეთ მხáƒáƒšáƒáƒ“ IPv6 სáƒáƒ™áƒ”ტები\n"
+
+#: src/fuser.c:170
+#, fuzzy, c-format
+#| msgid ""
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" - პáƒáƒ áƒáƒ›áƒ”ტრების გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ\n"
+"\n"
+" udp/tcp სáƒáƒ®áƒ”ლები: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"(C) 1993-2022 ვერნერ áƒáƒšáƒ›áƒ”სბერგერი დრქრეგ სმáƒáƒšáƒ˜, ყველრუფლებრდáƒáƒªáƒ£áƒšáƒ˜áƒ\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc áƒáƒ‘სáƒáƒšáƒ£áƒ¢áƒ£áƒ áƒáƒ“ გáƒáƒ áƒáƒœáƒ¢áƒ˜áƒ˜áƒ¡ გáƒáƒ áƒ”შე მáƒáƒ’ეწáƒáƒ“ებáƒáƒ—.\n"
+"ეს უფáƒáƒ¡áƒ პრáƒáƒ’რáƒáƒ›áƒáƒ დრთქვენ უფლებრგáƒáƒ¥áƒ•áƒ—, გáƒáƒáƒ•áƒ áƒªáƒ”ლáƒáƒ— ის\n"
+"GNU-ის ზáƒáƒ’áƒáƒ“ი სáƒáƒ¯áƒáƒ áƒ ლიცენზიით.\n"
+"მეტი ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡áƒ—ვის იხილეთ ფáƒáƒ˜áƒšáƒ˜ COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "/proc სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ის გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "შესáƒáƒ‘áƒáƒ›áƒ˜áƒ¡áƒ˜ პრáƒáƒªáƒ”სისთვის მეხსიერების გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შეცდáƒáƒ›áƒ: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "მითითებული ფáƒáƒ˜áƒšáƒ˜ (%s) áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "%s-ის áƒáƒ¦áƒ›áƒáƒ©áƒ”ნის შეცდáƒáƒ›áƒ: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr ""
+"ლáƒáƒ™áƒáƒšáƒ£áƒ áƒ˜ პáƒáƒ áƒ¢áƒ˜áƒ¡ (%s) áƒáƒ›áƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ: %s\n"
+"\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "უცნáƒáƒ‘ი ლáƒáƒ™áƒáƒšáƒ£áƒ áƒ˜ პáƒáƒ áƒ¢áƒ˜ AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "პრáƒáƒ¢áƒáƒ™áƒáƒšáƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "მითითებული ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი (%s) მიმáƒáƒ’რების წერტილი áƒáƒ áƒáƒ.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ პáƒáƒ áƒáƒ›áƒ”ტრი %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "სáƒáƒ®áƒ”ლების სივრცის პáƒáƒ áƒáƒ›áƒ”ტრისთვის áƒáƒ áƒ’უმენტის მითითებრáƒáƒ£áƒªáƒ˜áƒšáƒ”ბელიáƒ."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ სáƒáƒ®áƒ”ლების სივრცის სáƒáƒ®áƒ”ლი"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "შეგიძლიáƒáƒ— გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნáƒáƒ— მხáƒáƒšáƒáƒ“ მიმáƒáƒ’რების წერტილის პáƒáƒ áƒáƒ›áƒ”ტრებიáƒáƒœáƒ˜ ფáƒáƒ˜áƒšáƒ”ბი"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "პრáƒáƒªáƒ”სის სპეციფიკáƒáƒªáƒ˜áƒ მითითებული áƒáƒ áƒáƒ"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "გáƒáƒ©áƒ£áƒ›áƒ”ბის პáƒáƒ áƒáƒ›áƒ”ტრთáƒáƒœ ერთáƒáƒ“ ყველრპáƒáƒ áƒáƒ›áƒ”ტრს ვერ გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებთ."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "მხáƒáƒšáƒáƒ“ IPv4 დრმხáƒáƒšáƒáƒ“ IPv6 სáƒáƒ™áƒ”ტების ერთდრáƒáƒ£áƒšáƒ˜ ძებნრშეუძლებელიáƒ"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელი PID წვდáƒáƒ›áƒ ბრძáƒáƒœáƒ”ბáƒ\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(უცნáƒáƒ‘იáƒ)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ (%s) áƒáƒ¦áƒ›áƒáƒ©áƒ”ნის შეცდáƒáƒ›áƒ: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "/proc/net/unix-ის გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "მáƒáƒ•áƒ™áƒšáƒ პრáƒáƒªáƒ”სი %d ? (y(დიáƒáƒ®)/N(áƒáƒ áƒ, ნáƒáƒ’ულისხმები) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "პრáƒáƒªáƒ”სის (%d) მáƒáƒ™áƒ•áƒšáƒ˜áƒ¡ შეცდáƒáƒ›áƒ: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "ქსელური სáƒáƒ™áƒ”ტის გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "სáƒáƒ™áƒ”ტის მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის ნáƒáƒ›áƒ áƒ˜áƒ¡ პáƒáƒ•áƒœáƒ შეუძლებელიáƒ.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "მáƒáƒ•áƒ™áƒšáƒ %s(%s%d) ? (y(დიáƒáƒ®)/N(áƒáƒ áƒ, ნáƒáƒ’ულისხმები) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "გáƒáƒ•áƒáƒ’ზáƒáƒ•áƒœáƒ სიგნáƒáƒšáƒ˜ %s(%s%d) ? (y(დიáƒáƒ®)/N(áƒáƒ áƒ, ნáƒáƒ’ულისხმები) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: პრáƒáƒªáƒ”სის სტáƒáƒ¢áƒ£áƒ¡áƒ˜áƒ“áƒáƒœ UID-ის მიღების შეცდáƒáƒ›áƒ\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ რეგულáƒáƒ áƒ£áƒšáƒ˜ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბáƒ: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: ნáƒáƒ¬áƒ˜áƒšáƒáƒ‘რივი დáƒáƒ›áƒ—ხვევის %s(%d) გáƒáƒ›áƒáƒ¢áƒáƒ•áƒ”ბáƒ\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "მáƒáƒ™áƒ•áƒ“რ%s(%s%d) სიგნáƒáƒšáƒ˜áƒ— %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: პრáƒáƒªáƒ”სი ვერ ვიპáƒáƒ•áƒ”\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "გáƒáƒ›áƒáƒ§áƒ”ნებáƒ: killall [პáƒáƒ áƒáƒ›áƒ”ტრი]... [--] სáƒáƒ®áƒ”ლი...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact ყáƒáƒ•áƒ”ლი გრძელი ხáƒáƒ–ის ზუსტი დáƒáƒ›áƒ—ხვევის მáƒáƒ—ხáƒáƒ•áƒœáƒ\n"
+" -I,--ignore-case პრáƒáƒªáƒ”სის სáƒáƒ®áƒ”ლის დáƒáƒ›áƒ—ხვევრრეგისტრის გáƒáƒ—ვáƒáƒšáƒ˜áƒ¡áƒ¬áƒ˜áƒœáƒ”ბის "
+"გáƒáƒ áƒ”შე\n"
+" -g,--process-group პრáƒáƒªáƒ”სის მáƒáƒ’იერ პრáƒáƒªáƒ”სების ჯგუფის მáƒáƒ™áƒ•áƒšáƒ\n"
+" -y,--younger-than მითითებულ დრáƒáƒ–ე უფრრáƒáƒ®áƒáƒšáƒ’áƒáƒ–რდრპრáƒáƒªáƒ”სების მáƒáƒ™áƒ•áƒšáƒ\n"
+" -o,--older-than მითითებულ დრáƒáƒ–ე უფრრხáƒáƒœáƒ“áƒáƒ–მული პრáƒáƒªáƒ”სების მáƒáƒ™áƒ•áƒšáƒ\n"
+" -i,--interactive მáƒáƒ™áƒ•áƒšáƒáƒ›áƒ“ე დáƒáƒ¡áƒ¢áƒ£áƒ áƒ˜áƒ¡ მáƒáƒ—ხáƒáƒ•áƒœáƒ\n"
+" -l,--list ყველრცნáƒáƒ‘ილი სიგნáƒáƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლის ჩáƒáƒ›áƒáƒœáƒáƒ—ვáƒáƒšáƒ˜áƒ¡ ჩვენებáƒ\n"
+" -q,--quiet გáƒáƒ¤áƒ áƒ—ხილებები ნáƒáƒ©áƒ•áƒ”ნები áƒáƒ  იქნებáƒ\n"
+" -r,--regexp მითითებული სáƒáƒ®áƒ”ლის, რáƒáƒ’áƒáƒ áƒª გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული რეგულáƒáƒ áƒ£áƒšáƒ˜ "
+"გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბის, მიღებáƒ\n"
+" -s,--signal SIGNAL SIGTERM-ის მáƒáƒ’იერ áƒáƒ› სიგნáƒáƒšáƒ˜áƒ¡ გáƒáƒ’ზáƒáƒ•áƒœáƒ\n"
+" -u,--user USER მხáƒáƒšáƒáƒ“ მითითებული მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლით გáƒáƒ¨áƒ•áƒ”ბული პრáƒáƒªáƒ”სების "
+"მáƒáƒ™áƒ•áƒšáƒ\n"
+" -v,--verbose áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜áƒ¡ სიგნáƒáƒšáƒ˜áƒ¡ წáƒáƒ áƒ›áƒáƒ¢áƒ”ბით გáƒáƒ’ზáƒáƒ•áƒœáƒ˜áƒ¡ შესáƒáƒ®áƒ”ბ\n"
+" -V,--version ვერსიის ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ ჩვენებáƒ\n"
+" -w,--wait პრáƒáƒªáƒ”სების სიკვდილის დáƒáƒšáƒáƒ“ებáƒ\n"
+" -n,--ns PID მხáƒáƒšáƒáƒ“ იგივე სáƒáƒ®áƒ”ლების სივრცეში მდებáƒáƒ áƒ” პრáƒáƒªáƒ”სების "
+"დáƒáƒ›áƒ—ხვევáƒ,\n"
+" რáƒáƒ’áƒáƒ áƒª PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEX მხáƒáƒšáƒáƒ“ მითითებული კáƒáƒœáƒ¢áƒ”ქსტის მქáƒáƒœáƒ” პრáƒáƒªáƒ”სების მáƒáƒ™áƒ•áƒšáƒ\n"
+" (მითითებული უნდრიყáƒáƒ¡ ყველრსხვრდáƒáƒ™áƒ£áƒ›áƒ”ნტზე áƒáƒ“რე)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "დრáƒáƒ˜áƒ¡ áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒ áƒ›áƒáƒ¢áƒ˜"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის (%s) პáƒáƒ•áƒœáƒ შეუძლებელიáƒ\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "სáƒáƒ®áƒ”ლების სივრცის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ PID"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ რეგულáƒáƒ áƒ£áƒšáƒ˜ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბáƒ: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: სáƒáƒ®áƒ”ლების მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒáƒšáƒ£áƒ áƒ˜ რáƒáƒáƒ“ენáƒáƒ‘áƒáƒ: %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s -ს პრáƒáƒªáƒ”სის ჩáƒáƒœáƒáƒ¬áƒ”რები áƒáƒ™áƒšáƒ˜áƒ (áƒáƒ áƒáƒ მიმáƒáƒ’რებული?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "PID %i-თáƒáƒœ მიბმის შეცდáƒáƒ›áƒ\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"(C) 2007 ტრენტ ვáƒáƒ“ინგტáƒáƒœáƒ˜, ყველრუფლებრდáƒáƒªáƒ£áƒšáƒ˜áƒ\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"გáƒáƒ›áƒáƒ§áƒ”ნებáƒ: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean 8 ბიტიáƒáƒœáƒ˜ სუფთრნáƒáƒ™áƒáƒ“ების გáƒáƒ›áƒáƒ¢áƒáƒœáƒ.\n"
+" -n, --no-headers fd თáƒáƒ•áƒ¡áƒáƒ áƒ—ების ჩáƒáƒ¬áƒ”რáƒ/წáƒáƒ™áƒ˜áƒ—ხვრნáƒáƒ©áƒ•áƒ”ნები áƒáƒ  "
+"იქნებáƒ.\n"
+" -c, --follow áƒáƒ®áƒáƒšáƒ˜ შვილი პრáƒáƒªáƒ”სების მითვáƒáƒšáƒ§áƒ£áƒ áƒ”ბული "
+"იქნებáƒ.\n"
+" -t, --tgid ყველრáƒáƒ®áƒáƒšáƒ˜ ნáƒáƒ™áƒáƒ“ის მითვáƒáƒšáƒ§áƒ£áƒ áƒ”ბáƒ, სáƒáƒ“áƒáƒª "
+"tgid <pid>-ის ტáƒáƒšáƒ˜áƒ.\n"
+" -d, --duplicates-removed გáƒáƒ›áƒáƒ¢áƒáƒœáƒ˜áƒšáƒ˜ ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ“áƒáƒœ დუბლირებული ჩáƒáƒ¬áƒ”რáƒ/"
+"წáƒáƒ™áƒ˜áƒ—ხვების მáƒáƒªáƒ˜áƒšáƒ”ბáƒ.\n"
+" -V, --version ვერსიის ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ ჩვენებáƒ.\n"
+" -h, --help áƒáƒ› დáƒáƒ®áƒ›áƒáƒ áƒ”ბის გáƒáƒ›áƒáƒ¢áƒáƒœáƒ.\n"
+"\n"
+" გáƒáƒ›áƒáƒ¢áƒáƒœáƒ˜áƒ¡ დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ”ბლáƒáƒ“ დáƒáƒáƒ¬áƒ”ქით CTRL-C.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"გáƒáƒ›áƒáƒ§áƒ”ნებáƒ: prtstat [პáƒáƒ áƒáƒ›áƒ”ტრები] PID ...\n"
+" prtstat -V\n"
+"პრáƒáƒªáƒ”სის შესáƒáƒ®áƒ”ბ ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ›áƒáƒ¢áƒáƒœáƒ\n"
+" -r,--raw დáƒáƒ£áƒ›áƒ£áƒ¨áƒáƒ•áƒ”ბელი ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ›áƒáƒ¢áƒáƒœáƒ\n"
+" -V,--version ვერსიის ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ›áƒáƒ¢áƒáƒœáƒ დრგáƒáƒ¡áƒ•áƒšáƒ\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2020 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"2009-2020 Craig Small, ყველრუფლებრდáƒáƒªáƒ£áƒšáƒ˜áƒ\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "გáƒáƒ¨áƒ•áƒ”ბულიáƒ"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "სძინáƒáƒ•áƒ¡"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "დისკზე სძინáƒáƒ•áƒ¡"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "ზáƒáƒ›áƒ‘ი"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "მიყáƒáƒšáƒ”ბული"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "პეიჯინგი"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "unknown"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"პრáƒáƒªáƒ”სი: %-14s\t\\მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘áƒ: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tნáƒáƒ™áƒáƒ“ი: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"პრáƒáƒªáƒ”სების, ჯგუფებისრდრსესიების ID-ები\n"
+" პრáƒáƒªáƒ”სის ID: %d\t\t მშáƒáƒ‘ლის ID: %d\n"
+" ჯგუფის ID: %d\t\t სესიის ID: %d\n"
+" T ჯგუფის ID: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"გვერდის შეცდáƒáƒ›áƒ”ბი\n"
+" ეს პრáƒáƒªáƒ”სი (დáƒáƒ›áƒ®áƒ›áƒáƒ áƒ” ძირითáƒáƒ“ი): %8lu %8lu\n"
+" შვილი პრáƒáƒªáƒ”სები (დáƒáƒ›áƒ®áƒ›áƒáƒ áƒ” ძირითáƒáƒ“ი): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU-ის დრáƒáƒ”ბი\n"
+" ეს პრáƒáƒªáƒ”სი (მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელი სისტემრსტუმáƒáƒ áƒ˜ blkio): %6.2f %6.2f %6.2f "
+"%6.2f\n"
+" შვილი პრáƒáƒªáƒ”სები (მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელი სისტემრსტუმáƒáƒ áƒ˜): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"მეხსიერებáƒ\n"
+" Vზáƒáƒ›áƒ: %-10s\n"
+" RSS: %-10s \t\t RSS ზღვáƒáƒ áƒ˜: %s\n"
+" Code Start: %#-10lx\t\t კáƒáƒ“ის დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜: %#-10lx\n"
+" სტეკის დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜: %#-10lx\n"
+" სტეკზე მáƒáƒ©áƒ•áƒ”ნებელი (ESP): %#10lx\t Inst მáƒáƒ©áƒ•áƒ”ნებელი (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"დáƒáƒ’ეგმვáƒ\n"
+" პáƒáƒšáƒ˜áƒ¢áƒ˜áƒ™áƒ: %s\n"
+" Nice: %ld \t\t რდ პრიáƒáƒ áƒ˜áƒ¢áƒ”ტი: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "print_stat -ში asprintf -ის შეცდáƒáƒ›áƒ.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "პრáƒáƒªáƒ”სი PID-ით %d áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "შეცდáƒáƒ›áƒ stat ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡áƒáƒ¡ PID-სთვის %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "შეცდáƒáƒ›áƒ proc_info -სთვის მეხსიერების გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ˜áƒ¡áƒáƒ¡\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "შეცდáƒáƒ›áƒ stat ფáƒáƒ˜áƒšáƒ˜áƒ¡ სკáƒáƒœáƒ˜áƒ áƒ”ბისáƒáƒ¡"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ პáƒáƒ áƒáƒ›áƒ”ტრი"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "სáƒáƒ­áƒ˜áƒ áƒáƒ ერთი PID მáƒáƒ˜áƒœáƒª მიუთითáƒáƒ—."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc მიმáƒáƒ’რებული áƒáƒ áƒáƒ. /proc/self/stat áƒáƒ¦áƒ›áƒáƒ©áƒ”ნილი áƒáƒ áƒáƒ.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s ცáƒáƒ áƒ˜áƒ”ლირ(áƒáƒ áƒáƒ მიმáƒáƒ’რებული ?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"გáƒáƒ›áƒáƒ§áƒ”ნებáƒ: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N ტიპი ]\n"
+" [ -A | -G | -U ] [ PID | მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბელი ]\n"
+" áƒáƒœ: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"პრáƒáƒªáƒ”სების ხის ჩვენებáƒ.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments ბრძáƒáƒœáƒ”ბის სტრიქáƒáƒœáƒ˜áƒ¡ áƒáƒ áƒ’უმენტების ჩვენებáƒ\n"
+" -A, --ascii ხáƒáƒ–ების ხáƒáƒ¢áƒ•áƒ˜áƒ¡áƒáƒ¡ ASCII სიმბáƒáƒšáƒáƒ”ბის გáƒáƒ›áƒáƒ§áƒ”ნებáƒ\n"
+" -c, --compact-not ერთნáƒáƒ˜áƒ áƒ˜ ქვე-ხეების áƒáƒ  შედáƒáƒ áƒ“ებáƒ\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=ტიპი პრáƒáƒªáƒ”სის ფერი áƒáƒ¢áƒ áƒ˜áƒ‘უტის მიხედვით\n"
+" (áƒáƒ¡áƒáƒ™áƒ˜)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids პრáƒáƒªáƒ”სის ჯგუფის ID-ების ჩვენებáƒ. იყენებს -c\n"
+" -G, --vt100 VT100 -ის ხáƒáƒ–ის დáƒáƒ¡áƒáƒ®áƒáƒ¢áƒ˜ სიმბáƒáƒšáƒáƒ”ბის გáƒáƒ›áƒáƒ§áƒ”ნებáƒ\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all მიდინáƒáƒ áƒ” პრáƒáƒªáƒ”სისრდრმისი წინáƒáƒžáƒ áƒ”ბის გáƒáƒ›áƒáƒ™áƒ•áƒ”თáƒ\n"
+" -H PID, --highlight-pid=PID\n"
+" áƒáƒ› პრáƒáƒªáƒ”სისრდრმისი წინáƒáƒžáƒ áƒ”ბის გáƒáƒ›áƒáƒ™áƒ•áƒ”თáƒ\n"
+" -l, --long გრძელი ხáƒáƒ–ები წáƒáƒ™áƒ•áƒ”თილი áƒáƒ  იქნებáƒ\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort გáƒáƒ›áƒáƒ¢áƒáƒœáƒ˜áƒšáƒ˜áƒ¡ PID-ით დáƒáƒšáƒáƒ¢áƒ”ბáƒ\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" áƒáƒ› სáƒáƒ®áƒ”ლების სივრცის ტიპის დáƒáƒšáƒáƒ’ებáƒ\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids PID-ების ჩვენებáƒ; áƒáƒ¡áƒ”ვე ჩáƒáƒ áƒ—áƒáƒ•áƒ¡ -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ პრáƒáƒªáƒ”სის მშáƒáƒ‘ლების ჩვენებáƒ\n"
+" -S, --ns-changes სáƒáƒ®áƒ”ლების სივრცის გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ˜áƒ¡ ჩვენებე\n"
+" -t, --thread-names ნáƒáƒ™áƒáƒ“ის სრული სáƒáƒ®áƒ”ლების ჩვენებáƒ\n"
+" -T, --hide-threads ნáƒáƒ™áƒáƒ“ების დáƒáƒ›áƒáƒšáƒ•áƒ დრმხáƒáƒšáƒáƒ“ პრáƒáƒªáƒ”სების ჩვენებáƒ\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes uid-ის გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ”ბის ჩვენებáƒ\n"
+" -U, --unicode ხáƒáƒ–ის დáƒáƒ¡áƒáƒ®áƒáƒ¢áƒ˜ სიმბáƒáƒšáƒáƒ”ბისთვის UTF-8-ის (უნიკáƒáƒ“ი) "
+"გáƒáƒ›áƒáƒ§áƒ”ნებáƒ\n"
+" -V, --version ვერსიის ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ›áƒáƒ¢áƒáƒœáƒ\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" უსáƒáƒ¤áƒ áƒ—ხáƒáƒ”ბის áƒáƒ¢áƒ áƒ˜áƒ‘უტების ჩვენებáƒ\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID PID-ებსის მითითებული რიცხვიდáƒáƒœ დáƒáƒ¬áƒ§áƒ”ბáƒ. ნáƒáƒ’ულისხმებირ1 (init)\n"
+" USER მხáƒáƒšáƒáƒ“ áƒáƒ› მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის პრáƒáƒªáƒ”სების ფესვებიდáƒáƒœ áƒáƒ›áƒáƒ–რდილი პრáƒáƒªáƒ”სების "
+"ჩვენებáƒ\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM დáƒáƒ§áƒ”ნებული áƒáƒ áƒáƒ\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "ტერმინáƒáƒšáƒ˜áƒ¡ შესáƒáƒ«áƒšáƒ”ბლáƒáƒ‘ების მიღების შეცდáƒáƒ›áƒ\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "procfs ფáƒáƒ˜áƒšáƒ˜ %s სáƒáƒ®áƒ”ლთრსივრცისთვის მიუწვდáƒáƒ›áƒ”ლიáƒ\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "áƒáƒ¡áƒ”თი მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის სáƒáƒ®áƒ”ლი áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "პრáƒáƒªáƒ”სი %d ვერ მáƒáƒ˜áƒ«áƒ”ბნáƒ.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "პრáƒáƒªáƒ”სები ვერ მáƒáƒ˜áƒ«áƒ”ბნáƒ.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "დáƒáƒ®áƒ£áƒ áƒ•áƒ˜áƒ¡áƒ—ვის დáƒáƒáƒ­áƒ˜áƒ áƒ”თ დáƒáƒ‘რუნებáƒáƒ¡\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: უცნáƒáƒ‘ი სიგნáƒáƒšáƒ˜. სიგნáƒáƒšáƒ”ბის სიის მისáƒáƒ¦áƒ”ბáƒáƒ“ გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ %s -l\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "(C) 1993-2021 ვერნერ áƒáƒšáƒ›áƒ”სბერგერი დრქრეგ სმáƒáƒšáƒ˜, ყველრუფლებრდáƒáƒªáƒ£áƒšáƒ˜áƒ\n"
+#~ "\n"
diff --git a/po/ko.gmo b/po/ko.gmo
new file mode 100644
index 0000000..4c97803
--- /dev/null
+++ b/po/ko.gmo
Binary files differ
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..ec0b855
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,745 @@
+# Korean translation of the psmisc package.
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Seong-ho Cho <darkcircle.0426@gmail.com>, 2022, 2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-14 11:01+0900\n"
+"Last-Translator: Seong-ho Cho <darkcircle.0426@gmail.com>\n"
+"Language-Team: Korean <translation-team-ko@googlegroups.com>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.4.2\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"사용법: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n <ì˜ì—­>]\n"
+" [-k [-i] [-<시그ë„>]] <ì´ë¦„>...\n"
+" fuser -l\n"
+" fuser -V\n"
+"ì–´ë–¤ 프로세스가 ì´ë¦„ì„ ì§€ì •í•œ 파ì¼, 소켓, 파ì¼ì‹œìŠ¤í…œì„ 사용하는지 나타냅니"
+"다.\n"
+"\n"
+" -a,--all 사용하지 않는 파ì¼ë„ 표시\n"
+" -i,--interactive 강제로 ë내기 ì „ í™•ì¸ (-k 없으면 무시함)\n"
+" -I,--inode íŒŒì¼ ë¹„êµì‹œ í•­ìƒ ì•„ì´ë…¸ë“œ 활용\n"
+" -k,--kill ì´ë¦„ì´ ë¶™ì€ íŒŒì¼ì— 접근하는 프로세스 강제로 ë내기\n"
+" -l,--list-signals 모든 가용 ì‹œê·¸ë„ ì´ë¦„ 표시\n"
+" -m,--mount ì´ë¦„ì„ ì§€ì •í•œ íŒŒì¼ ì‹œìŠ¤í…œ ë˜ëŠ” ë¸”ë¡ ìž¥ì¹˜ë¡œ\n"
+" 모든 프로세스 표시\n"
+" -M,--ismountpoint <ì´ë¦„>ì´ ë§ˆìš´íŠ¸ 지ì ì¼ 경우ì—만 요청 수행\n"
+" -n,--namespace <ì˜ì—­> 지정 ì´ë¦„ ì˜ì—­ (file, udp, ë˜ëŠ” tcp)ì—ì„œ 검색\n"
+" -s,--silent ë™ìž‘ 출력 안함\n"
+" -<시그ë„> SIGKILL 대신 지정 ì‹œê·¸ë„ ì „ì†¡\n"
+" -u,--user ì‚¬ìš©ìž ID 표시\n"
+" -v,--verbose ìžì„¸í•˜ê²Œ 출력\n"
+" -w,--writeonly 쓰기 ì ‘ê·¼ì´ ìžˆëŠ” 프로세스만 강제로 ë냄\n"
+" -V,--version 버전 정보 표시\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 IPv4 소켓만 검색\n"
+" -6,--ipv6 IPv6 소켓만 검색\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" udp/tcp ì´ë¦„: [<로컬_í¬íŠ¸>][,[<ì›ê²©_호스트>][,[<ì›ê²©_í¬íŠ¸>]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc는 명백한 무보ì¦ì„ 통해 제공합니다.\n"
+"ì´ í”„ë¡œê·¸ëž¨ì€ ìžìœ  소프트웨어ì´ë©°, GNU 공중 사용 허가서ì˜\n"
+"ì¡°í•­ì— ë”°ë¥¸ 재배í¬ë¥¼ 환ì˜í•©ë‹ˆë‹¤.\n"
+"ìžì„¸í•œ 정보는 COPYING 파ì¼ì„ 살펴보십시오.\n"
+"\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "/proc 디렉터리 ì—´ 수 ì—†ìŒ: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "ì¼ì¹˜í•˜ëŠ” procì— ë©”ëª¨ë¦¬ë¥¼ 할당할 수 ì—†ìŒ: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "지정한 %s íŒŒì¼ ì´ë¦„ì´ ì—†ìŠµë‹ˆë‹¤.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "%s ìƒíƒœ ì •ë³´ 가져올 수 ì—†ìŒ: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "%s 로컬 í¬íŠ¸ë¥¼ í•´ì„í•  수 ì—†ìŒ: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "ì•Œ 수 없는 로컬 í¬íŠ¸ AF %d번\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "\"%s\" 프로토콜 파ì¼ì„ ì—´ 수 없습니다: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "지정한 %s 파ì¼ì€ 마운트 지ì ì´ 아닙니다.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: 부ì ì ˆí•œ 옵션 %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "ì´ë¦„ ì˜ì—­ ì˜µì…˜ì— ì¸ìžê°€ 필요합니다."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "부ì ì ˆí•œ ì´ë¦„ ì˜ì—­ì˜ ì´ë¦„"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "마운트 ì§€ì  ì˜µì…˜ì—만 파ì¼ì„ 활용할 수 있습니다"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "지정한 프로세스가 없습니다"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "모든 ì˜µì…˜ì€ ì¶œë ¥ 중지 옵션과 사용할 수 없습니다."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "IPv4 ë° IPv6 ì†Œì¼“ì„ ë™ì‹œì— 검색할 수 없습니다"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s ì‚¬ìš©ìž PID ì ‘ê·¼ 명령\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(ì•Œ 수 ì—†ìŒ)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "%s íŒŒì¼ ìƒíƒœ ì •ë³´ 가져올 수 ì—†ìŒ: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "/proc/net/unix ì—´ 수 ì—†ìŒ: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "프로세스 %dë²ˆì„ ê°•ì œë¡œ ë냅니까? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "프로세스 %dë²ˆì„ ê°•ì œë¡œ ë낼 수 없습니다: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "ë„¤íŠ¸ì›Œí¬ ì†Œì¼“ì„ ì—´ 수 없습니다.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "소켓 장치 번호를 ì°¾ì„ ìˆ˜ 없습니다.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "%s 프로세스(%s%d)를 강제로 ë냅니까 ? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "%s 시그ë„(%s%d)ì„ ë³´ëƒ…ë‹ˆê¹Œ? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: 프로세스 ìƒíƒœ ì •ë³´ì—ì„œ UID를 가져올 수 없습니다\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: ìž˜ëª»ëœ ì •ê·œ 표현ì‹: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: ì¼ë¶€ %s ì¼ì¹˜ í•­ëª©ì„ ê±´ë„ˆëœ€(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d)ì„(를) %d번 시그ë„ë¡œ 강제로 ë냈습니다\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: 지정 프로세스가 없습니다\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "사용법: killall [<옵션>]... [--] <ì´ë¦„>...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact 매우 긴 ì´ë¦„ì— ì •í™•ížˆ ì¼ì¹˜í•´ì•¼ 함\n"
+" -I,--ignore-case 프로세스 ì´ë¦„ ì¼ì¹˜ì‹œ ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ 안함\n"
+" -g,--process-group 프로세스가 ì•„ë‹Œ 프로세스 그룹 강제로 ë냄\n"
+" -y,--younger-than 지정 <시간> ì´í›„ì˜ í”„ë¡œì„¸ìŠ¤ë¥¼ 강제로 ë냄\n"
+" -o,--older-than 지정 <시간> ì´ì „ì˜ í”„ë¡œì„¸ìŠ¤ë¥¼ 강제로 ë냄\n"
+" -i,--interactive 강제로 ë내기 ì „ í™•ì¸ ì§ˆë¬¸\n"
+" -l,--list ì¼ë ¤ì§„ 모든 ì‹œê·¸ë„ ì´ë¦„ì„ ë‚˜íƒ€ëƒ„\n"
+" -q,--quiet 처리 질문/오류 ë“±ì„ ë‚˜íƒ€ë‚´ì§€ ì•ŠìŒ\n"
+" -r,--regexp <ì´ë¦„> ì„ í™•ìž¥ ì •ê·œ 표현ì‹ìœ¼ë¡œ í•´ì„\n"
+" -s,--signal <시그ë„> SIGTERM 대신 지정 ì‹œê·¸ë„ ë³´ëƒ„\n"
+" -u,--user <사용ìž> 지정 <사용ìž>ê°€ 실행하는 프로세스만 강제로 ë냄\n"
+" -v,--verbose 시그ë„ì„ ì œëŒ€ë¡œ 보냈는지 ë³´ê³ \n"
+" -V,--version 버전 정보를 나타냄\n"
+" -w,--wait 프로세스가 ëë‚  때까지 대기\n"
+" -n,--ns PID PIDì— í•´ë‹¹í•˜ëŠ” ë™ì¼í•œ ì´ë¦„ ì˜ì—­ ì´ë¦„ê³¼ ì¼ì¹˜í•˜ëŠ” 프로세"
+"스만\n"
+" 처리\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context <ì •ê·œì‹> 컨í…ìŠ¤íŠ¸ì— í•´ë‹¹í•˜ëŠ” 프로세스만 강제로 ë냅니다\n"
+" (다른 ì¸ìžë³´ë‹¤ 우선해야함)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "ìž˜ëª»ëœ ì‹œê°„ 형ì‹"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "%s 사용ìžê°€ 없습니다\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "부ì ì ˆí•œ ì´ë¦„ ì˜ì—­ PID"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "ìž˜ëª»ëœ ì •ê·œ 표현ì‹: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: ì´ë¦„ì— í• ë‹¹í•œ 최대 번호는 %d번입니다\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %sì— í”„ë¡œì„¸ìŠ¤ í•­ëª©ì´ ë¹ ì¡ŒìŠµë‹ˆë‹¤ (마운트 안함?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "PID %ië²ˆì— ì ‘ê·¼í•˜ëŠ” 중 오류\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"사용법: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean 8 비트 í´ë¦° ìŠ¤íŠ¸ë¦¼ì„ ì¶œë ¥í•©ë‹ˆë‹¤.\n"
+" -n, --no-headers fd í—¤ë”ì˜ ì½ê¸° 쓰기를 나타내지 않습니다.\n"
+" -c, --follow ì–´ë–¤ 새 하위 í”„ë¡œì„¸ìŠ¤ë„ ì‚´íŽ´ë´…ë‹ˆë‹¤.\n"
+" -t, --tgid <pid>와 ë™ì¼í•œ 모든 tgid 스레드를 살펴봅니"
+"다.\n"
+" -d, --duplicates-removed 출력ì—ì„œ ì½ê¸°/쓰기 ì¤‘ë³µì„ ì œê±°í•©ë‹ˆë‹¤.\n"
+" -V, --version 버전 정보를 나타냅니다.\n"
+" -h, --help ì´ ë„움ë§ì„ 나타냅니다.\n"
+"\n"
+" ì¶œë ¥ì„ ë내려면 CTRL-C 키를 누르십시오.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"사용법: prtstat [<옵션>] PID ...\n"
+" prtstat -V\n"
+"프로세스 정보를 출력합니다\n"
+" -r,--raw ì›ì‹œ 정보를 나타냅니다\n"
+" -V,--version 버전 정보를 나타낸 후 나갑니다\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "실행중"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "대기중"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "디스í¬ëŒ€ê¸°"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "좀비"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "추ì í•¨"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "페ì´ì§•"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "알수없ìŒ"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"프로세스: %-14s\t\tìƒíƒœ: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\t스레드: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"프로세스, 그룹, 세션 ID\n"
+" 프로세스 ID: %d\t\t ìƒìœ„ ID: %d\n"
+" 그룹 ID: %d\t\t 세션 ID: %d\n"
+" T 그룹 ID: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"페ì´ì§• 실패\n"
+" ì´ í”„ë¡œì„¸ìŠ¤ (minor major): %8lu %8lu\n"
+" 하위 프로세스 (minor major): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU 시간\n"
+" ì´ í”„ë¡œì„¸ìŠ¤ (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" 하위 프로세스 (user system guest): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"메모리\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS 한계: %s\n"
+" Code 시작: %#-10lx\t\t Code 정지: %#-10lx\n"
+" ìŠ¤íƒ ì‹œìž‘: %#-10lx\n"
+" ìŠ¤íƒ í¬ì¸í„° (ESP): %#10lx\t 명령 í¬ì¸í„° (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"스케쥴ë§\n"
+" ì •ì±…: %s\n"
+" Nice: %ld \t\t RT 우선순위: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "print_statì—ì„œ asprintì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "PID %d번 프로세스는 없습니다.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "PID %dë²ˆì˜ ìƒíƒœ ì •ë³´ 파ì¼ì„ ì—´ 수 없습니다(%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "proc_infoì— í•„ìš”í•œ 메모리를 할당할 수 없습니다\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "ìƒíƒœ ì •ë³´ 파ì¼ì„ 검사할 수 없습니다"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "부ì ì ˆí•œ 옵션"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "최소한 PID 하나는 지정해야 합니다."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"/proc 디렉터리를 마운트하지 ì•Šì•„ /proc/self/stat ìƒíƒœ 정보를 가져올 수 없습니"
+"다.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%sì€(는) 비어있습니다 (마운트 안함?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"사용법: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" ë˜ëŠ”: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"프로세스를 트리 형ì‹ìœ¼ë¡œ 나타냅니다.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments 명령행 실행 ì¸ìžë¥¼ 나타냅니다\n"
+" -A, --ascii ì„  ë¬¸ìž í‘œí˜„ì‹œ ASCIIì„ í™œìš©í•©ë‹ˆë‹¤\n"
+" -c, --compact-not ì´ìƒì ì¸ 하위 트리를 축소하지 않습니다\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=<형ì‹> ì†ì„±ì— ë”°ë¼ ìƒ‰ìƒì„ 처리합니다\n"
+" (age)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids 프로세스 그룹 ID를 나타냅니다. -c ìƒëžµí•¨\n"
+" -G, --vt100 ì„  ë¬¸ìž í‘œí˜„ì‹œ VT100ì„ í™œìš©í•©ë‹ˆë‹¤\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all 현재 프로세스와 ìƒìœ„ 요소를 강조합니다\n"
+" -H PID, --highlight-pid=PID\n"
+" 지정 프로세스와 ìƒìœ„ 요소를 강조합니다\n"
+" -l, --long 긴 ì¤„ì„ ìžë¥´ì§€ 않습니다\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort PID순으로 출력 ë‚´ìš©ì„ ì •ë ¬í•©ë‹ˆë‹¤\n"
+" -N <형ì‹>, --ns-sort=<형ì‹>\n"
+" ì´ë¦„ ì˜ì—­ 형ì‹ì— ë”°ë¼ ì¶œë ¥ ë‚´ìš©ì„ ì •ë ¬í•©ë‹ˆë‹¤\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids PID를 나타냅니다. -c ìƒëžµí•¨\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents ì„ íƒí•œ í”„ë¡œì„¸ìŠ¤ì˜ ìƒìœ„ 요소를 나타냅니다\n"
+" -S, --ns-changes ì´ë¦„ ì˜ì—­ ë³€ì´ë¥¼ 나타냅니다\n"
+" -t, --thread-names ì „ì²´ 스레드 ì´ë¦„ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤\n"
+" -T, --hide-threads 스레드는 숨기고 프로세스만 나타냅니다\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes UID ë³€ì´ë¥¼ 나타냅니다\n"
+" -U, --unicode ì„  ë¬¸ìž í‘œí˜„ì‹œ UTF-8 (유니코드)를 활용합니다\n"
+" -V, --version 버전 정보를 나타냅니다\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" 보안 ì†ì„±ì„ 나타냅니다\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID ì´ PID값으로 시작합니다. ê¸°ë³¸ê°’ì€ 1(init)입니다\n"
+" USER ì´ ì‚¬ìš©ìžì˜ 최ìƒìœ„ 기본 실행 í”„ë¡œì„¸ìŠ¤ë§Œì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERMì„ ì„¤ì •í•˜ì§€ 않았습니다\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "í„°ë¯¸ë„ ê°€ìš© 정보를 가져올 수 없습니다\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "%s ì´ë¦„ ê³µê°„ì— procfs 파ì¼ì´ 없습니다.\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "그런 ì‚¬ìš©ìž ì´ë¦„ì€ ì—†ìŠµë‹ˆë‹¤: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "%d번 프로세스가 없습니다.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "프로세스가 없습니다.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Return키를 눌러 닫으십시오\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr ""
+"%s: ì•Œ 수 없는 시그ë„. ì‹œê·¸ë„ ëª©ë¡ì„ 보려면 %s -l ëª…ë ¹ì„ ì‚¬ìš©í•˜ì‹­ì‹œì˜¤.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
diff --git a/po/nb.gmo b/po/nb.gmo
new file mode 100644
index 0000000..050d632
--- /dev/null
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..6a84394
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,833 @@
+# Norwegian bokmål translation of psmisc 22.2pre1.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Trond Endrestøl <Trond.Endrestol@fagskolen.gjovik.no>, 2005.
+#
+# Send this file as an gzipped attachment to:
+# translation@iro.umontreal.ca
+# with the subject:
+# TP-Robot PACKAGE-VERSION.TEAM.po
+#
+# The subject for the Norwegian bokmål translation of psmisc 22.2pre1
+# would then be:
+# TP-Robot psmisc-22.2pre1.nb.po
+#
+# Here's the URL for the Norwegian bokmål translation team:
+# http://www.iro.umontreal.ca/translation/registry.cgi?team=nb
+#
+# Here's the URL for the current translations of GNU bison:
+# http://www.iro.umontreal.ca/translation/registry.cgi?domain=psmisc
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 22.2pre1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2006-03-07 12:01+0100\n"
+"Last-Translator: Trond Endrestøl <Trond.Endrestol@fagskolen.gjovik.no>\n"
+"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: src/fuser.c:146
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] "
+#| "NAME...\n"
+#| " [ - ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...\n"
+#| " fuser -l\n"
+#| " fuser -V\n"
+#| "Show which processes use the named files, sockets, or filesystems.\n"
+#| "\n"
+#| " -a display unused files too\n"
+#| " -c mounted FS\n"
+#| " -f silently ignored (for POSIX compatibility)\n"
+#| " -i ask before killing (ignored without -k)\n"
+#| " -k kill processes accessing the named file\n"
+#| " -l list available signal names\n"
+#| " -m show all processes using the named filesystems\n"
+#| " -n SPACE search in this name space (file, udp, or tcp)\n"
+#| " -s silent operation\n"
+#| " -SIGNAL send this signal instead of SIGKILL\n"
+#| " -u display user IDs\n"
+#| " -v verbose output\n"
+#| " -V display version information\n"
+#| " -4 search IPv4 sockets only\n"
+#| " -6 search IPv6 sockets only\n"
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Bruksmåte: fuser [ -a | -s | -c ] [ -n ROM ] [ -SIGNALl ] [ -kimuv ] "
+"NAVN ...\n"
+" [ - ] [ -n ROM ] [ -SIGNAL ] [ -kimuv ] NAVN ...\n"
+" fuser -l\n"
+" fuser -V\n"
+"\n"
+"Vise hvilke prosesser som bruker de angitte filene, socketer eller "
+"filsystemer.\n"
+"\n"
+" -a også vise ubrukte filer\n"
+" -c monterte filsystemer\n"
+" -f ignorert i det stille for POSIX-kompatibilitet\n"
+" -i spør før dreping (ignorert uten -k)\n"
+" -k drep prosesser som akserer den navngitte filen\n"
+" -l vis liste over tilgjengelige signalnavn\n"
+" -m vis alle prosesser som bruker de angitte monterte "
+"filesystemene\n"
+" -n ROM søk i det angitte navnerommet (file, udp, eller tcp)\n"
+" -s stille utførelse\n"
+" -SIGNAL send dette signalet i stedet for SIGKILL\n"
+" -u vis bruker-IDer\n"
+" -v ordrik output\n"
+" -V vis programversjon\n"
+" -4 søk bare blant IPv4-socketer\n"
+" -6 søk bare blant IPv6-socketer\n"
+" - nullstill valgene\n"
+"\n"
+" udp/tcp-navn: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2005 Werner Almesberger og Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc kommer ABSOLUTT UTEN NOEN GARANTI.\n"
+"Dette er fri programvare, og du har tillatelse til å redistribuere det\n"
+"under betingelsene i GNU General Public License.\n"
+"For mer informasjon om dette, les filene som heter COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Kan ikke åpne /proc-katalogen: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Kan ikke allokere minne for funnet prosess: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr ""
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Kan ikke kjøre stat på %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Kan ikke løse lokalport %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Ukjent lokalport AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Kan ikke åpne protokollfil «%s»: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr ""
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr ""
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Navneromvalget krever et argument."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Ugyldig navn på navnerom"
+
+#: src/fuser.c:1309
+#, fuzzy
+#| msgid "You can only use files with mountpoint option"
+msgid "You can only use files with mountpoint options"
+msgstr "Du kan bare bruke filer med monteringspunktvalget"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Ingen prosesspesifikasjon ble gitt"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "alle valg kan ikke bli brukt med stillevalget."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Du kan ikke søke etter bare IPv4- og bare IPv6-socketer samtidig"
+
+# Oversettelsen av denne strengen er noe vanskelig da dette er en
+# tabelloverskrift som skal passe med selve tabellen. [TE, 2005-03-01]
+#: src/fuser.c:1474
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%*s USER PID ACCESS COMMAND\n"
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr ""
+"\n"
+"%*s BRUKER PID ACCESS KOMMANDO\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(ukjent)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Kan ikke kjøre stat på fila %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Kan ikke åpne /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Drepe prosess %d ? (j/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Kunne ikke drepe prosessen %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Kan ikke åpne en nettverkssocket.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Kan ikke finne socketens enhetsnummer.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Drepe %s(%s%d) ? (j/n) "
+
+#: src/killall.c:114
+#, fuzzy, c-format
+#| msgid "Kill %s(%s%d) ? (y/N) "
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Drepe %s(%s%d) ? (j/n) "
+
+#: src/killall.c:262
+#, fuzzy, c-format
+#| msgid "Cannot get UID from process status\n"
+msgid "killall: Cannot get UID from process status\n"
+msgstr "Kan ikke finne UID fra prosesstatus\n"
+
+#: src/killall.c:368
+#, fuzzy, c-format
+#| msgid "Bad regular expression: %s\n"
+msgid "killall: Bad regular expression: %s\n"
+msgstr "Ugyldig regulært uttrykk: %s\n"
+
+#: src/killall.c:525
+#, fuzzy, c-format
+#| msgid "skipping partial match %s(%d)\n"
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "hopper over delvis treff %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Drepte %s(%s%d) med signalet %d\n"
+
+#: src/killall.c:796
+#, fuzzy, c-format
+#| msgid "%s: no process killed\n"
+msgid "%s: no process found\n"
+msgstr "%s: drepte ingen prosess\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Bruksmåte: killall [VALG]... [--] navn...\n"
+
+#: src/killall.c:839
+#, fuzzy, c-format
+#| msgid ""
+#| " killall -l, --list\n"
+#| " killall -V, --version\n"
+#| "\n"
+#| " -e,--exact require exact match for very long names\n"
+#| " -I,--ignore-case case insensitive process name match\n"
+#| " -g,--process-group kill process group instead of process\n"
+#| " -i,--interactive ask for confirmation before killing\n"
+#| " -l,--list list all known signal names\n"
+#| " -q,--quiet don't print complaints\n"
+#| " -r,--regexp interpret NAME as an extended regular expression\n"
+#| " -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+#| " -u,--user USER kill only process(es) running as USER\n"
+#| " -v,--verbose report if the signal was successfully sent\n"
+#| " -V,--version display version information\n"
+#| " -w,--wait wait for processes to die\n"
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact krever nøyaktig treff for veldig lange navn\n"
+" -I,--ignore-case ignorerer store/små bokstaver i prosessnavn\n"
+" -g,--process-group drep prosessgrupper i stedet for prosesser\n"
+" -i,--interactive spør om bekreftelse før dreping\n"
+" -l,--list vis alle kjente signalnavn\n"
+" -q,--quiet ikke syt dersom det ikke går bra\n"
+" -r,--regexp tolk NAVN som et utvidet regulært uttrykk\n"
+" -s,--signal send signal i stedet for SIGTERM\n"
+" -v,--verbose rapporter dersom signalet ble vellykket sendt\n"
+" -V,--version vis programinformasjon\n"
+" -w,--wait vent til prosessen er død\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP bare drep prosesser med kontekst\n"
+" (må komme foran andre argumenter)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr ""
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Kan ikke finne brukeren %s\n"
+
+#: src/killall.c:1016
+#, fuzzy
+#| msgid "Invalid namespace name"
+msgid "Invalid namespace PID"
+msgstr "Ugyldig navn på navnerom"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Ugyldig regulært uttrykk: %s\n"
+
+#: src/killall.c:1057
+#, fuzzy, c-format
+#| msgid "Maximum number of names is %d\n"
+msgid "killall: Maximum number of names is %d\n"
+msgstr "Maksimalt antall navn er %d\n"
+
+#: src/killall.c:1062
+#, fuzzy, c-format
+#| msgid "%s is empty (not mounted ?)\n"
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "%s er tom (ikke montert?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr ""
+
+#: src/peekfd.c:191
+#, fuzzy, c-format
+#| msgid "pstree (PSmisc) %s\n"
+msgid "peekfd (PSmisc) %s\n"
+msgstr "pstree (psmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+
+#: src/prtstat.c:65
+#, fuzzy, c-format
+#| msgid "pstree (PSmisc) %s\n"
+msgid "prtstat (PSmisc) %s\n"
+msgstr "pstree (psmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2005 Werner Almesberger og Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr ""
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr ""
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr ""
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr ""
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr ""
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr ""
+
+#: src/prtstat.c:90
+#, fuzzy
+#| msgid "(unknown)"
+msgid "unknown"
+msgstr "(ukjent)"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr ""
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr ""
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr ""
+
+#: src/prtstat.c:243
+#, fuzzy, c-format
+#| msgid "Cannot allocate memory for matched proc: %s\n"
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Kan ikke allokere minne for funnet prosess: %s\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr ""
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr ""
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr ""
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s er tom (ikke montert?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+
+#: src/pstree.c:1326
+#, fuzzy, c-format
+#| msgid ""
+#| " PID start at this PID; default is 1 (init)\n"
+#| " USER show only trees rooted at processes of this user\n"
+#| "\n"
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+" PID begynn med angitt pid, standard er 1 (init)\n"
+" BRUKER bare vis trær med opphav fra prosesser tilhørende denne brukeren\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (psmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM er ikke angitt\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Kan ikke finne ut egenskapene til terminalen\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr ""
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Fant ikke brukeren «%s».\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+#| msgid "No processes found.\n"
+msgid "Process %d not found.\n"
+msgstr "Fant ingen prosesser.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Fant ingen prosesser.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Trykk på enter for å lukke.\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: ukjent signal; %s -l angir kjente signaler.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruksmåte: pidof [ -eg ] navn ...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e krever nøyaktig treff for veldig lange navn;\n"
+#~ " hopp over dersom kommandolinjen er utilgjengelig\n"
+#~ " -g vis prosessgruppe ID i stedet for prosess ID\n"
+#~ " -V vis programversjon\n"
+#~ "\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Bruksmåte: killall [-Z kontekst] [-u bruker] [ -egiqvw ] [ -signal ] "
+#~ "navn ...\n"
+
+#, c-format
+#~ msgid "Cannot stat mount point %s: %s\n"
+#~ msgstr "Kan ikke kjøre stat på monteringspunktet %s: %s\n"
+
+#~ msgid "You cannot use the mounted and mountpoint flags together"
+#~ msgstr "Du kan ikke bruke montert- og monteringspunktvalgene samtidig"
+
+#, c-format
+#~ msgid "Cannot open /etc/mtab: %s\n"
+#~ msgstr "Kan ikke åpne /etc/mtab: %s\n"
+
+#, c-format
+#~ msgid "Internal error: MAX_DEPTH not big enough.\n"
+#~ msgstr "Intern feil: MAX_DEPTH er ikke stor nok.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -u ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a show command line arguments\n"
+#~ " -A use ASCII line drawing characters\n"
+#~ " -c don't compact identical subtrees\n"
+#~ " -h highlight current process and its ancestors\n"
+#~ " -H PID highlight this process and its ancestors\n"
+#~ " -G use VT100 line drawing characters\n"
+#~ " -l don't truncate long lines\n"
+#~ " -n sort output by PID\n"
+#~ " -p show PIDs; implies -c\n"
+#~ " -u show uid transitions\n"
+#~ " -U use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V display version information\n"
+#~ msgstr ""
+#~ "Bruksmåte: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -"
+#~ "u ]\n"
+#~ " [ -A | -G | -U ] [ PID | BRUKER ]\n"
+#~ " pstree -V\n"
+#~ "\n"
+#~ "Vis et prosesstre.\n"
+#~ "\n"
+#~ " -a vis argumentene fra kommandolinjen\n"
+#~ " -A tegn linjer med ASCII-tegn\n"
+#~ " -c ikke komprimer identiske undertrær\n"
+#~ " -h uthev nåværende prosess og dets opphav\n"
+#~ " -H PID uthev prosessen «pid» og dets opphav\n"
+#~ " -G tegn linjer med VT100-tegn\n"
+#~ " -l ikke avkort lange linjer\n"
+#~ " -n sorter output etter PID\n"
+#~ " -p vis PIDs; medfører -c\n"
+#~ " -u vis uid-overganger\n"
+#~ " -U tegn linjer med UTF-8-tegn (Unicode)\n"
+#~ " -V vis programversjon\n"
+
+#, c-format
+#~ msgid " -Z show SELinux security contexts\n"
+#~ msgstr " -Z vis SELinux sikkerhetskontekster\n"
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644
index 0000000..64a8af6
--- /dev/null
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..5f4600c
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,839 @@
+# Dutch translations for psmisc.
+# Copyright (C) 2023 Free Software Foundation, Inc.
+# This file is distributed under the same license as the PSmisc package.
+#
+# « Que dites-vous là, monsieur? » dit elle en colère.
+# « Madame, dit il, il ne faut pas tromper l'enfance. »
+#
+# Benno Schulenberg <benno@vertaalt.nl>, 2004, 2005, 2006, 2007, 2010.
+# Erwin Poeze <erwin.poeze@gmail.com>, 2010.
+# Benno Schulenberg <benno@vertaalt.nl>, 2012, 2013, 2014, 2016, 2019, 2021, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-23.6-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2023-12-24 13:21+0100\n"
+"Last-Translator: Benno Schulenberg <vertaling@coevern.nl>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Gebruik: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n NAAMSRUIMTE]\n"
+" [-k [-i] [-SIGNAAL]] NAAM...\n"
+" of: fuser [-l|-V]\n"
+"\n"
+"Toont de processen die gebruik maken van de genoemde bestanden,\n"
+"sockets of bestandssystemen\n"
+"\n"
+" -a, --all de ongebruikte bestanden ook noemen\n"
+" -i, --interactive bevestiging vragen voor afbreken (genegeerd zonder "
+"-k)\n"
+" -I, --inode altijd inodes gebruiken om bestanden te "
+"vergelijken\n"
+" -k, --kill processen afbreken die het gegeven bestand "
+"gebruiken\n"
+" -l, --list-signals lijst van beschikbare signalen tonen\n"
+" -m, --mount alle processen tonen die het gegeven "
+"bestandssysteem\n"
+" of blokapparaat gebruiken\n"
+" -M, --ismountpoint alleen aan verzoek voldoen als NAAM aankoppelpunt "
+"is\n"
+" -n, --namespace RUIMTE in gegeven naamsruimte ('file', 'udp', 'tcp') "
+"zoeken\n"
+" -s, --silent geen uitvoer produceren\n"
+" -SIGNAAL dit signaal sturen in plaats van SIGKILL\n"
+" -u, --user de gebruiker-IDs tonen\n"
+" -v, --verbose uitgebreide uitvoer tonen\n"
+" -V, --version de programmaversie tonen\n"
+" -w,--writeonly alleen processen met schrijfrecht afbreken\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 alleen naar IPv4-sockets zoeken\n"
+" -6,--ipv6 alleen naar IPv6-sockets zoeken\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" - alle opties terugzetten op standaardwaarden\n"
+" tcp/udp-namen: [lokale_poort][,[gindse_host][,[gindse_poort]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2022 Werner Almesberger en Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc kent GEEN ENKELE GARANTIE.\n"
+"Dit is vrije software en mag vrijelijk verspreid worden,\n"
+"onder de voorwaarden van de GNU General Public License.\n"
+"Zie voor meer informatie hierover het bestand genaamd COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Kan /proc niet openen: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Onvoldoende geheugen beschikbaar om gevonden proces te verwerken: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Opgegeven bestandsnaam %s bestaat niet.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Kan status van %s niet bepalen: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Kan lokale poort %s nergens toe herleiden: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Onbekende lokale poort AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Kan protocolbestand '%s' niet openen: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Opgegeven bestandsnaam %s is geen aankoppelpunt.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: ongeldige optie %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "De naamsruimte-optie '-n' vereist een argument"
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Ongeldige naamsruimte"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Er zijn alleen bestanden toegestaan samen met aankoppelpuntopties"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Geen naam van bestand of socket opgegeven"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "Opties '-a' en '-s' gaan niet samen"
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Opties '-4' en '-6' gaan niet samen"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s GEBRUIKER PID SOORT PROGRAMMA\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(onbekend)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Kan status van bestand %s niet bepalen: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Kan /proc/net/unix niet openen: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Proces %d afbreken? (j/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Kan proces %d niet afbreken: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Kan netwerk-socket niet openen.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Kan apparaatnummer van socket niet vinden.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Proces %s(%s%d) afbreken? (j/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Proces %s(%s%d) een signaal sturen? (j/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Kan uit processtatus geen UID bepalen\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Ongeldige reguliere expressie: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: Overgeslagen: gedeeltelijke overeenkomst %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Proces %s(%s%d) is afgebroken met signaal %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: geen proces gevonden\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Gebruik: killall [OPTIE...] [--] NAAM...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" of: killall [-l|--list]\n"
+" of: killall [-V|--version]\n"
+"\n"
+" -e,--exact zeer lange namen moeten exact overeenkomen\n"
+" -I,--ignore-case verschil tussen hoofd- en kleine letters negeren\n"
+" -g,--process-group een procesgroep afbreken in plaats van een proces\n"
+" -y,--younger-than processen nieuwer dan TIJD afbreken\n"
+" -o,--older-than processen ouder dan TIJD afbreken\n"
+" -i,--interactive om bevestiging vragen alvorens af te breken\n"
+" -l,--list lijst van bekende signalen tonen\n"
+" -q,--quiet geen foutmeldingen geven\n"
+" -r,--regexp NAAM is een uitgebreide reguliere expressie\n"
+" -s,--signal SIGNAAL dit signaal sturen in plaats van SIGTERM\n"
+" -u,--user GEBRUIKER alleen proces(sen) van deze gebruiker afbreken\n"
+" -V,--version de programmaversie tonen\n"
+" -v,--verbose melden of het signaal succesvol verstuurd is\n"
+" -w,--wait wachten tot processen ook werkelijk afgebroken zijn\n"
+" -n,--ns PID alleen processen die tot dezelfde naamsruimte\n"
+" behoren als PID\n"
+"\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP alleen processen met deze context afbreken\n"
+" (dient aan andere argumenten vooraf te gaan)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Ongeldige tijdopmaak"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Kan gebruiker %s niet vinden\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Ongeldige PID voor naamsruimte"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Ongeldige reguliere expressie: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Het maximum aantal namen is %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s bevat geen procesitems -- misschien niet aangekoppeld?\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Fout tijdens aanhechten aan PID %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Gebruik: peekfd [-8cdnt] [-Vh] <PID> [<bestandsdescriptor>...]\n"
+"\n"
+" -8, --eight-bit-clean 8-bits-schone uitvoer produceren\n"
+" -c, --follow nieuwe dochterprocessen ook bekijken\n"
+" -d, --duplicates-removed dubbele vermeldingen onderdrukken\n"
+" -n, --no-headers lees-/schrijfmeldingen van descriptors "
+"weglaten\n"
+" -t, --tgid alle threads bekijken waar de TGID == <PID>\n"
+" -V, --version de programmaversie tonen\n"
+" -h, --help deze hulptekst tonen\n"
+"\n"
+"Typ Ctrl-C om het programma te stoppen.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Gebruik: prtstat [-r] PID ...\n"
+" of: prtstat -V\n"
+"\n"
+"Toont informatie over een proces.\n"
+"\n"
+" -r,--raw ruwe uitvoer van informatie\n"
+" -V,--version de programmaversie tonen en stoppen\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2022 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2022 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "runt"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "slaapt"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "wacht"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "getraced"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "swappend"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "onbekend"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Proces: %-14s\t\tStatus: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tDraden: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Proces-, groeps- en sessie-IDs\n"
+" Proces-ID: %d\t\t Ouder-ID: %d\n"
+" Groeps-ID: %d\t\t Sessie-ID: %d\n"
+" T-groeps-ID: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Page Faults\n"
+" Dit proces (zacht : hard): %8lu : %8lu\n"
+" Dochterprocessen (zacht : hard): %8lu : %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU-tijden\n"
+" Dit proces (gebruiker systeem gast blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Dochters (gebruiker systeem gast): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Geheugen\n"
+" Virtuele grootte: %-10s\n"
+" RSS: %-10s\t\t RSS-grens: %s\n"
+" Begin van code: %#-10lx\t\t Einde van code: %#-10lx\n"
+" Begin van stack: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst.Pointer (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Scheduling\n"
+" Beleid: %s\n"
+" Nice: %ld \t\t RT-prioriteit: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf() in print_stat() is mislukt.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Proces met PID %d bestaat niet.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Kan stat-bestand voor PID %d niet openen (%s).\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Onvoldoende geheugen beschikbaar voor proc_info()\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Kan stat-bestand niet scannen"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Ongeldige optie"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Er moet minstens één PID gegeven worden."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"/proc is niet aangekoppeld, kan status van /proc/self/stat niet bepalen.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s is leeg -- misschien niet aangekoppeld?\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Gebruik: pstree [-acglpsStTuZ] [-h|-H PID] [-n|-N SOORT]\n"
+" [-A|-G|-U] [ PID | GEBRUIKER ]\n"
+" of: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Toont huidige processen in een boomstructuur.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments argumenten van de opdrachtregel tonen\n"
+" -A, --ascii ASCII-tekens voor de lijntjes gebruiken\n"
+" -c, --compact-not identieke subbomen niet compacteren\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr " -C, --color=TYPE proces kleuren volgens dit attribuut ('age')\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids procesgroeps-ID's tonen (impliceert '-c')\n"
+" -G, --vt100 VT100-tekens voor de lijntjes gebruiken\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all huidig proces en zijn voorouders accentueren\n"
+" -H PID, --highlight-pid=PID\n"
+" dit proces en zijn voorouders accentueren\n"
+" -l, --long lange regels niet afkappen\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort uitvoer sorteren op PID\n"
+" -N SOORT, --ns-sort=SOORT\n"
+" uitvoer sorteren op deze SOORT naamsruimte\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids PIDs tonen (impliceert '-c')\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents ouders van geselecteerd proces tonen\n"
+" -S, --ns-changes naamsruimte-overgangen tonen\n"
+" -t, --thread-names volledige thread-namen tonen\n"
+" -T, --hide-threads threads verbergen; alleen processen tonen\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes UID-overgangen tonen\n"
+" -U, --unicode Unicode-tekens (UTF-8) voor de lijntjes gebruiken\n"
+" -V, --version de programmaversie tonen en stoppen\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" veiligheidscontexten tonen\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID bij dit proces-ID beginnen; standaard is 1 (init)\n"
+" NAAM alleen de bomen tonen die beginnen bij processen van deze "
+"gebruiker\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "Omgevingsvariabele TERM heeft geen waarde.\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Kan terminalcapaciteiten niet bepalen\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "Het 'procfs'-bestand voor de '%s'-naamsruimte is niet beschikbaar\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Geen bestaande gebruikersnaam: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Geen proces %d gevonden.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Geen processen gevonden.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Druk op Enter om af te sluiten\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr ""
+"Onbekend signaal: %s -- '%s -l' toont een lijst van mogelijke signalen.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger en Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Gebruik: pstree [-acglpsStTu] [-h|-H PID] [-l] [-n|-N SOORT]\n"
+#~ " [-A|-G|-U] [ PID | GEBRUIKER ]\n"
+#~ " of: pstree -V\n"
+#~ "\n"
+#~ "Toont huidige processen in een boomstructuur.\n"
+#~ "\n"
+#~ " -a, --arguments argumenten van de opdrachtregel tonen\n"
+#~ " -A, --ascii ASCII-tekens voor de lijntjes gebruiken\n"
+#~ " -c, --compact identieke subbomen niet compacteren\n"
+#~ " -g, --show-pgids procesgroeps-ID's tonen (impliceert '-c')\n"
+#~ " -G, --vt100 VT100-tekens voor de lijntjes gebruiken\n"
+#~ " -h, --highlight-all huidig proces en zijn voorouders accentueren\n"
+#~ " -H PID, --highlight-pid=PID\n"
+#~ " dit proces en zijn voorouders accentueren\n"
+#~ " -l, --long lange regels niet afkappen\n"
+#~ " -n, --numeric-sort uitvoer sorteren op PID\n"
+#~ " -N SOORT, --ns-sort=SOORT\n"
+#~ " uitvoer sorteren op deze SOORT naamsruimte\n"
+#~ " (ipc, mnt, net, pid, user, uts)\n"
+#~ " -p, --show-pids PIDs tonen (impliceert '-c')\n"
+#~ " -s, --show-parents ouders van geselecteerd proces tonen\n"
+#~ " -S, --ns-changes naamsruimte-overgangen tonen\n"
+#~ " -t, --thread-names volledige thread-namen tonen\n"
+#~ " -T, --hide-threads threads verbergen; alleen processen tonen\n"
+#~ " -u, --uid-changes UID-overgangen tonen\n"
+#~ " -U, --unicode Unicode-tekens (UTF-8) voor de lijntjes gebruiken\n"
+#~ " -V, --version de programmaversie tonen en stoppen\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Gebruik: pidof [-eg] NAAM...\n"
+#~ " of: pidof -V\n"
+#~ "\n"
+#~ " -e zeer lange namen moeten exact overeenkomen\n"
+#~ " (genegeerd als de opdrachtregel niet beschikbaar is)\n"
+#~ " -g procesgroeps-ID tonen in plaats van proces-ID\n"
+#~ " -V de programmaversie tonen\n"
+#~ "\n"
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644
index 0000000..f462eda
--- /dev/null
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..336ad69
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,739 @@
+# Polish translations for psmisc.
+# Copyright (C) 2004, 2005, 2007, 2009, 2010, 2012, 2013, 2014, 2016, 2018, 2019, 2021, 2022, 2024 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2003-2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-13 19:32+0100\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Składnia: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n PRZESTRZEŃ]\n"
+" [-k [-i] [-SYGNAÅ]] NAZWA...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Pokazywanie, które procesy używają plików, gniazd lub systemów plików\n"
+"o podanych nazwach.\n"
+"\n"
+" -a,--all wyświetlenie także nie używanych plików\n"
+" -i,--interactive pytanie przed zabiciem (ignorowane bez -k)\n"
+" -I,--inode używanie zawsze i-węzłów przy porównywaniu plików\n"
+" -k,--kill zabicie procesów używających podanego pliku\n"
+" -l,--list-signals lista nazw sygnałów\n"
+" -m,--mount pokazanie procesów używających podanych systemów\n"
+" plików lub urządzeń\n"
+" -M,--ismountpoint wykonywanie poleceń tylko jeśli NAZWA jest punktem\n"
+" montowania\n"
+" -n,--namespace PRZ szukanie w podanej przestrzeni nazw (file, udp lub "
+"tcp)\n"
+" -s,--silent działanie po cichu\n"
+" -SYGNAŠwysłanie podanego sygnału zamiast SIGKILL\n"
+" -u,--user wyświetlenie identyfikatorów użytkowników\n"
+" -v,--verbose podanie większej ilości informacji\n"
+" -w,--writeonly zabicie tylko procesów z prawem zapisu\n"
+" -V,--version wyświetlenie informacji o wersji\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 szukanie tylko gniazd IPv4\n"
+" -6,--ipv6 szukanie tylko gniazd IPv6\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" nazwy tcp/udp: [port_lokalny][,[host_zdalny][,[port_zdalny]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2024 Werner Almesberger i Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc jest rozpowszechniany BEZ ŻADNEJ GWARANCJI.\n"
+"To oprogramowanie jest darmowe i może być dystrybuowane na warunkach\n"
+"Powszechnej Licencji Publicznej GNU (General Public License).\n"
+"Więcej informacji znajduje się w pliku o nazwie COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Nie można otworzyć katalogu /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Nie można przydzielić pamięci dla dopasowanego procesu: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Podana nazwa pliku %s nie istnieje.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Nie można wykonać stat na %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Nie można rozwiązać portu lokalnego %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Nieznana rodzina adresów portu lokalnego %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Nie można otworzyć pliku protokołu \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Podana nazwa pliku %s nie jest punktem montowania.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Błędna opcja %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Opcja przestrzeni nazw wymaga argumentu."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Niepoprawna nazwa przestrzeni nazw"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Z opcjami punktu montowania można używać tylko plików"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Nie podano określenia procesów"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "opcja wszystkich plików nie może być użyta z opcją ciszy."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Nie można naraz szukać gniazd wyłącznie IPv4 i wyłącznie IPv6"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s UŻYTKOWNIK PID DOSTĘP POLECENIE\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(nieznany)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Nie można wykonać stat na pliku %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Nie można otworzyć /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Zabić proces %d? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Nie udało się zabić procesu %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Nie można otworzyć gniazda sieciowego.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Nie można odnaleźć numeru urządzenia gniazda.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Zabić %s(%s%d)? (t/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Wysłać sygnał do %s(%s%d)? (t/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: nie można pobrać UID-a ze stanu procesu\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: błędne wyrażenie regularne: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: pominięto częściowe dopasowanie %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Zabito %s(%s%d) sygnałem %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: nie znaleziono żadnego procesu\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Składnia: killall [OPCJE]... [--] NAZWA...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact wymaganie dokładnego dopasowania dla bardzo długich "
+"nazw\n"
+" -I,--ignore-case dopasowywanie nazw procesów niewrażliwe na wielkość "
+"liter\n"
+" -g,--process-group zabicie grupy procesów zamiast procesu\n"
+" -y,--younger-than zabicie procesów młodszych niż CZAS\n"
+" -o,--other-than zabicie procesów starszych niż CZAS\n"
+" -i,--interactive pytanie o potwierdzenie przed zabiciem\n"
+" -l,--list wypisanie wszystkich znanych nazw sygnałów\n"
+" -q,--quiet nie wyświetlanie narzekań\n"
+" -r,--regexp użycie NAZWY jako rozszerzonego wyrażenia regularnego\n"
+" -s,--signal SYGNAŠwysłanie podanego sygnału zamiast SIGTERM\n"
+" -u, --user UŻYTK zabicie tylko procesów działających jako podany "
+"użytkownik\n"
+" -v,--verbose informowanie czy wysłanie sygnału się powiodło\n"
+" -V,--version wyświetlenie informacji o wersji\n"
+" -w,--wait zaczekanie na śmierć procesów\n"
+" -n,--ns PID dopasowanie procesów należących do przestrzeni nazw "
+"PID-u\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP zabicie tylko procesu(ów) mających dany kontekst "
+"bezp.\n"
+" (musi poprzedzać inne argumenty)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Błędny format czasu"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Nie można odnaleźć użytkownika %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Błędny PID przestrzeni nazw"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Błędne wyrażenie regularne: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: maksymalna liczba nazw to %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s nie ma wpisów procesów (nie jest zamontowany?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Błąd podczas podłączania do procesu %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Składnia: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean wypisywanie strumieni czysto 8-bitowych.\n"
+" -n, --no-headers bez nagłówków odczytu/zapisu z "
+"deskryptora.\n"
+" -c, --follow podglądanie także nowych procesów "
+"potomnych.\n"
+" -t, --tgid podglądanie wątków o tgid równym <pid>.\n"
+" -d, --duplicates-removed usuwanie z wyjścia powtórzonych odczytów/"
+"zapisów.\n"
+" -V, --version wypisanie informacji o wersji.\n"
+" -h, --help wypisanie tego opisu.\n"
+"\n"
+" Ctrl-C kończy wyjście.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Składnia: prtstat [opcje] PID ...\n"
+" prtstat -V\n"
+"Wypisywanie informacji o procesie\n"
+" -r,--raw Wyświetlenie informacji w postaci surowej\n"
+" -V,--version Wypisanie informacji o wersji i zakończenie\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "działa"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "śpi"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "op.dyskowa"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "śledzony"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "wymiana"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "nieznany"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Proces: %-14s\t\tStan: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tWątków: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"ID procesu, grupy i sesji\n"
+" ID procesu: %d\t\t ID rodzica: %d\n"
+" ID grupy: %d\t\t ID sesji: %d\n"
+" ID grupy t: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Niepowodzenia stronicowania\n"
+" Ten proces (min maj): %8lu %8lu\n"
+" Procesy potomne (min maj): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Czasy procesora\n"
+" Ten proces (użytkownika systemowy gościnny blkio): %6.2f %6.2f %6.2f "
+"%6.2f\n"
+" Procesy potomne (użytkownika systemowy gościnny: %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Pamięć\n"
+" RozmWirt/VSz: %-10s\n"
+" RSS: %-10s \t\t Limit RSS: %s\n"
+" Pocz. kodu: %#-10lx\t\t Koniec kodu: %#-10lx\n"
+" Pocz. stosu: %#-10lx\n"
+" Wsk. stosu (ESP): %#-10lx\t\t Wsk. instr. (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Szeregowanie\n"
+" Polityka: %s\n"
+" Wart.nice: %ld \t\t Priorytet RT: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf w print_stat nie powiódł się.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Proces o pidzie %d nie istnieje.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Nie udało się otworzyć pliku stat dla pidu %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Nie można przydzielić pamięci dla proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Nie udało się przejrzeć pliku stat"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Błędna opcja"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Trzeba podać przynajmniej jeden PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"/proc nie jest zamontowany, nie można wykonać stat na /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s jest pusty (nie podmontowany?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Składnia: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N typ ]\n"
+" [ -A | -G | -U ] [ PID | UŻYTKOWNIK ]\n"
+" lub: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Wyświetlanie drzewa procesów.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments wyświetlenie argumentów linii poleceń\n"
+" -A, --ascii użycie znaków ramek ASCII\n"
+" -c, --compact bez scalania identycznych poddrzew\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TYP kolorowanie procesów wg atrybutu\n"
+" (wiek)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids wyświetlanie identyfikatorów grup procesów; włącza -c\n"
+" -G, --vt100 użycie znaków ramek VT100\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -H PID, --highlight-pid=PID\n"
+" podświetlenie podanego procesu i jego przodków\n"
+" -l, --long bez ucinania długich linii\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort sortowanie wyjścia wg PID-u\n"
+" -N TYP, --ns-sort=TYP\n"
+" sortowanie wg podanego typu przestrzeni\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids wyświetlanie PID-ów; włącza także -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents wyświetlanie rodziców wybranego procesu\n"
+" -S, --ns-changes wyświetlanie zmian przestrzeni nazw\n"
+" -t, --thread-names wyświetlanie pełnych nazw wątków\n"
+" -T, --hide-threads ukrycie wątków, wyświetlanie jedynie procesów\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes wyświetlanie zmian uidów\n"
+" -U, --unicode użycie znaków ramek UTF-8 (Unicode)\n"
+" -V, --version wyświetlenie informacji o wersji\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" wyświetlanie atrybutów bezpieczeństwa\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID rozpoczęcie od tego PID-u, domyślnie 1 (init)\n"
+" UŻYTKOWNIK tylko drzewa zaczynające się od procesów tego użytkownika\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM nie ustawiony\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Nie można odczytać możliwości terminala\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "Plik procfs dla przestrzeni nazw %s nie jest dostępny\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Nie ma użytkownika o takiej nazwie: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Nie znaleziono procesu %d.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Nie znaleziono procesów.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Naciśnięcie return zamknie program\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: nieznany sygnał; %s -l wypisuje sygnały.\n"
diff --git a/po/psmisc.pot b/po/psmisc.pot
new file mode 100644
index 0000000..8140a31
--- /dev/null
+++ b/po/psmisc.pot
@@ -0,0 +1,600 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr ""
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr ""
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr ""
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr ""
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr ""
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr ""
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr ""
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr ""
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr ""
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr ""
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr ""
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr ""
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr ""
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr ""
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr ""
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr ""
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr ""
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr ""
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr ""
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr ""
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr ""
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr ""
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr ""
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr ""
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr ""
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr ""
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr ""
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr ""
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr ""
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr ""
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr ""
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr ""
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr ""
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr ""
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr ""
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr ""
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr ""
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr ""
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr ""
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr ""
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr ""
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr ""
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr ""
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr ""
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr ""
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr ""
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr ""
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr ""
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr ""
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr ""
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr ""
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr ""
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr ""
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr ""
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr ""
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr ""
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr ""
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr ""
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr ""
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr ""
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr ""
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr ""
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr ""
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr ""
diff --git a/po/pt.gmo b/po/pt.gmo
new file mode 100644
index 0000000..aa44fe6
--- /dev/null
+++ b/po/pt.gmo
Binary files differ
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..95e03e3
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,848 @@
+# Portuguese (portugal Translation for the psmisc Package.
+# Copyright (C) 2021 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Pedro Albuquerque <pmra@protonmail.com>, 2019,2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-23.4rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2021-01-25 06:53+0000\n"
+"Last-Translator: Pedro Albuquerque <pmra@protonmail.com>\n"
+"Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Geany / PoHelper 1.37\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Uso: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n ESPAÇO]\n"
+" [-k [-i] [-SINAL]] NOME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Mostra que processos usam os ficheiros, sockets, ou sistemas de ficheiros "
+"dados.\n"
+"\n"
+" -a,--all mostra também ficheiros não usados\n"
+" -i,--interactive pergunta antes de matar (ignorado sem -k)\n"
+" -I,--inode usa sempre inodes para comparar ficheiros\n"
+" -k,--kill mata processos acedendo ao ficheiro dado\n"
+" -l,--list-signals lista nomes de sinal disponíveis\n"
+" -m,--mount mostra todos os processos usando os sistemas de "
+"ficheiros dados ou\n"
+" bloqueia o dispositivo\n"
+" -M,--ismountpoint executa o pedido só se NOME for um ponto de "
+"montagem\n"
+" -n,--namespace ESPAÇO procura neste espaço de nome (ficheiro, udp, ou "
+"tcp)\n"
+" -s,--silent operação silenciosa\n"
+" -SINAL envia este sinal em vez de SIGKILL\n"
+" -u,--user mostra IDs de utilizador\n"
+" -v,--verbose saída verbosa\n"
+" -w,--writeonly mata só processos com acesso de escrita\n"
+" -V,--version mostra informação da versão\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 procurar só em sockets IPv4\n"
+" -6,--ipv6 procurar só em sockets IPv6\n"
+
+#: src/fuser.c:170
+#, fuzzy, c-format
+#| msgid ""
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" - repõe as opções\n"
+"\n"
+" nomes udp/tcp: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2020 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2020 Werner Almesberger e Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"O PSmisc vem sem ABSOLUTAMENTE NENHUMA GARANTIA.\n"
+"Este é um programa gratuito, pode redistribuí-lo sob os\n"
+"termos da GNU General Public License.\n"
+"Para mais informação sobre estes assuntos, veja os ficheiros chamados "
+"COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Impossível abrir a pasta /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Impossível alocar memória para proc coincidente: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "O nome de ficheiro %s não existe.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Impossível analisar %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Impossível resolver porta local %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Porta local AF %d desconhecida\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Impossível abrir ficheiro de protocolo \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "O nome de ficheiro %s não é um ponto de montagem.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: opção %s inválida\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "A opção de espaço de nome requer um argumento."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Espaço de nome inválido"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Só pode utilizar ficheiros com opções de ponto de montagem"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Sem especificação de processo dada"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "A opção all não pode ser usada com a opção de silêncio."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Impossível procurar por sockets só IPv4 e só IPv6 ao mesmo tempo"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s UTILIZADOR PID ACESSO COMANDO\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(desconhecido)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Impossível analisar %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Impossível abrir /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Matar o processo %d ? (s/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Impossível matar o processo %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Impossível abrir um socket de rede.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Impossível encontrar o número de dispositivo do socket.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Matar %s(%s%d) ? (s/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Sinalizar %s(%s%d) ? (s/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: impossível obter UID do estado do processo\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: má expressão regular: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: a ignorar coicidência parcial %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Morto %s(%s%d) com sinal %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: sem processo\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Uso: killall [OPÇÃO]... [--] NOME...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact requer correspondência exacta para nomes muito longos\n"
+" -I,--ignore-case ignora diferenças de maiúsculas ao comparar nomes de "
+"processos\n"
+" -g,--process-group Mata grupos de processos em vez de um só processo\n"
+" -y,--younger-than mata processos mais recentes que HORA\n"
+" -o,--older-than mata processos mais antigos que HORA\n"
+" -i,--interactive pede confirmação antes de matar\n"
+" -l,--list lista todos os nomes de sinal conhecidos\n"
+" -q,--quiet não imprime queixas\n"
+" -r,--regexp interpreta NOME como expressão regular estendida\n"
+" -s,--signal SInal envia este SINAL em vez de SIGTERM\n"
+" -u,--user USER mata só processo(s) executados como UTILIZADOR\n"
+" -v,--verbose reporta se o sinal foi enviado com sucesso\n"
+" -V,--version mostra informação da versão\n"
+" -w,--wait espera que os processos morram\n"
+" -n,--ns PID compara processos que pertencem ao mesmo espaço de "
+"nome\n"
+" que PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context EXPREG mata só processo(s) com contexto\n"
+" (tem de preceder outros argumentos)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Formato de hora inválido"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Impossível encontrar o utilizador %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "PID de nome de espaço inválido"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Má expressão regular: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: o número máximo de nomes é %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s tem entradas de processo em falta (não está montado?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Erro ao anexar a pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Uso: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean imprime fluxos limpos de 8 bit.\n"
+" -n, --no-headers não mostra leitura/escrita de cabeçalhos "
+"fd.\n"
+" -c, --follow espreita também a qualquer processo-filho.\n"
+" -t, --tgid espreita todos os tópicos onde tgid for "
+"igual a <pid>.\n"
+" -d, --duplicates-removed remove leituras/escritas duplicadas da "
+"saída.\n"
+" -V, --version mostra informação da versão.\n"
+" -h, --help mostra esta informação de ajuda.\n"
+"\n"
+" Prima CTRL-C para terminar a saída.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Uso: prtstat [opções] PID ...\n"
+" prtstat -V\n"
+"Imprime informação sobre um processo\n"
+" -r,--raw mostra informação em bruto\n"
+" -V,--version mostra informação da versão e sai\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2020 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2020 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "em execução"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "a dormir"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "disco adormecido"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "morto-vivo"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "seguido"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "a paginar"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "desconhecido"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Processo: %-14s\t\tEstado: %c (%s)\n"
+" CPU: %-3d\t\tTTY: %s\tLinhas: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Processo, IDs de grupo e sessão\n"
+" Processo ID: %d\t\t ID-mãe: %d\n"
+" ID grupo: %d\t\t ID sessão: %d\n"
+" T ID grupo: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Faltas da página\n"
+" Este processo (menor maior): %8lu %8lu\n"
+" Processos-filho (menor maior): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Tempos de CPU\n"
+" Este processo (utilizador sistema convidado blkio): %6.2f %6.2f %6.2f "
+"%6.2f\n"
+" Processos-filho (utilizador sistema convidado): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memória\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t\t Limite RSS : %s\n"
+" Início do código: %#-10lx\t\t Fim do código: %#-10lx\n"
+" Início da pilha : %#-10lx\n"
+" Ponteiro da pilha (ESP): %#10lx\t Ponteiro Inst (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Agendamento\n"
+" Política: %s\n"
+" Amável: %ld \t\t Prioridade RT: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf em print_stat falhou.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "O processo com o pid %d não existe.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Impossível abrir o ficheiro de estatísticas para o pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Impossível alocar memória para proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Impossível analisar ficheiro de estatísticas"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Opção inválida"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Tem de fornecer pelo menos um PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc não está montado, impossível analisar /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s está vazio (não montado?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Uso: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N tipo ]\n"
+" [ -A | -G | -U ] [ PID | UTILIZADOR ]\n"
+" ou: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Mostrar uma árvore de processos.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments mostrar argumentos da linha de comandos\n"
+" -A, --ascii usar caracteres de desenho de linha ASCII\n"
+" -c, --compact-not não comprimir sub-árvores idênticas\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TYPE colorir processo por atributo\n"
+" (idade)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids mostrar ids de grupos de processos; implica -c\n"
+" -G, --vt100 usar caracteres de desenho de linha VT100\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all realçar o processo actual e seus antecedentes\n"
+" -H PID, --highlight-pid=PID\n"
+" realçar este processo e seus antecedentes\n"
+" -l, --long não truncar linhas longas\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort ordenar a saída por PID\n"
+" -N TIPO, --ns-sort=TIPO\n"
+" ordenar a saída por este tipo de espaço de nome\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids mostrar PIDs; implica -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents mostrar progenitores do processo seleccionado\n"
+" -S, --ns-changes mostrar transições de espaço de nome\n"
+" -t, --thread-names mostrar nomes de tópico completos\n"
+" -T, --hide-threads ocultar tópicos, mostrar só processos\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes mostrar transições de uid\n"
+" -U, --unicode usar caracteres de desenho de linha UTF-8 (Unicode)\n"
+" -V, --version mostrar informação da versão\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" mostra atributos de segurança\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID começar neste PID; a predefinição é 1 (init)\n"
+" UTILIZ mostrar só árvores enraizadas em processos do utilizador UTILIZ\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERMO não definido\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Impossível obter recursos de terminal\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "ficheiro procfs para o espaço de nome %s indisponível\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Utilizador não existente: %s\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+#| msgid "No processes found.\n"
+msgid "Process %d not found.\n"
+msgstr "Sem processos encontrados.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Sem processos encontrados.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Prima Enter para fechar\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: sinal desconhecido; %s -l lista sinais.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger e Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Uso: killall [ -Z CONTEXTO ] [ -u UTILIZADOR ] [ -y HORA ] [ -o HORA ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SINAL | -SINAL ] NOME...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Uso: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N tipo ]\n"
+#~ " [ -A | -G | -U ] [ PID | UTILIZADOR ]\n"
+#~ " ou: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger e Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Uso: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N tipo ]\n"
+#~ "Uso: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N tipo ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Mostra uma árvore de processos.\n"
+#~ "\n"
+#~ " -a, --arguments mostra os argumentos da linha de comandos\n"
+#~ " -A, --ascii usa caracteres ASCII de desenho de linhas\n"
+#~ " -c, --compact não compacta sub-árvores idênticas\n"
+#~ " -h, --highlight-all realça os processos actuais e seus ascendentes\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID realça este processo e seus ascendentes\n"
+#~ " -g, --show-pgids mostra IDs de grupo de processo; implica -c\n"
+#~ " -G, --vt100 usa caracteres VT100 de desenho de linhas\n"
+#~ " -l, --long não trunca linhas longas\n"
+#~ " -n, --numeric-sort ordenar saída por PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=tipo ordenar por tipo de espaço de nome (cgroup, ipc, "
+#~ "mnt, net, pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids mostra PIDs; implica -c\n"
+#~ " -s, --show-parents mostra pais do processo seleccionado\n"
+#~ " -S, --ns-changes mostra transições do espaço de nome\n"
+#~ " -t, --thread-names mostra nomes completos das linhas\n"
+#~ " -T, --hide-threads oculta linhas, mostra só processos\n"
+#~ " -u, --uid-changes mostra transições uid\n"
+#~ " -U, --unicode usa caracteres UTF-8 (Unicode) de desenho de "
+#~ "linhas\n"
+#~ " -V, --version mostra informação da versão\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644
index 0000000..4d4477b
--- /dev/null
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..6b1feb6
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,882 @@
+# Brazilian Portuguese translation of psmisc.
+# This file is distributed under the same license as the psmisc package.
+# Copyright (C) 2021 Free Software Foundation, Inc.
+# Fabrício Godoy <skarllot@gmail.com>, 2009-2013.
+# Rafael Fontenelle <rafaelff@gnome.org>, 2013-2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.4rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2021-02-03 19:07-0300\n"
+"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
+"net>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"X-Generator: Gtranslator 3.38.0\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Uso: fuser [-fMuv] [-a|-s] [-4|-6] [-c|-m|-n ESPAÇO]\n"
+" [-k [-i] [-SINAL]] NOME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Mostra quais processos usam os arquivos, sockets ou sistema de arquivos "
+"especificados.\n"
+"\n"
+" -a,--all exibe também arquivos sem uso\n"
+" -i,--interactive pergunta antes de matar (ignorado sem -k)\n"
+" -k,--kill mata processos acessando o arquivo especificado\n"
+" -l,--list-signals lista os nomes de sinal disponíveis\n"
+" -m,--mount mostra todos processos usando o sistema de arquivos\n"
+" ou dispositivo de bloco especificado\n"
+" -M,--ismountpoint realiza solicitação apenas se NOME for um ponto\n"
+" de montagem\n"
+" -n,--namespace ESPAÇO pesquisa neste espaço de nome (file, udp ou tcp)\n"
+" -s,--silent operação silenciosa\n"
+" -SINAL envia este sinal em vez de SIGKILL\n"
+" -u,--user exibe IDs de usuário\n"
+" -v,--verbose saída detalhada\n"
+" -w,--writeonly mata apenas processos com acesso de gravação\n"
+" -V,--version exibe informações de versão\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 pesquisa apenas sockets IPv4\n"
+" -6,--ipv6 pesquisa apenas sockets IPv6\n"
+
+#: src/fuser.c:170
+#, fuzzy, c-format
+#| msgid ""
+#| " - reset options\n"
+#| "\n"
+#| " udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+#| "\n"
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" - redefine opções\n"
+"\n"
+" nomes udp/tcp: [porta_local][,[maq_rmt][,[porta_rmt]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2020 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2020 Werner Almesberger and Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc vem com ABSOLUTAMENTE NENHUMA GARANTIA.\n"
+"Este é um software livre, e você é bem-vindo em redistribuí-lo dentro\n"
+"dos termos da Licença Pública Geral GNU (GPL).\n"
+"Para mais informações a respeito, veja os arquivos com o nome COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Não foi possível abrir o diretório /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Não foi possível alocar memória ao proc equiparado: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "O nome de arquivo especificado %s não existe.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Não foi possível analisar %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Não foi possível resolver a porta local %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Família de endereços da porta local %d desconhecida\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Não foi possível abrir o arquivo de protocolo \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "O nome de arquivo especificado %s não é um ponto de montagem.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Opção inválida %s\n"
+
+# "--namespace" refere-se a uma opção do fuser, não traduzir.
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "A opção de \"--namespace\" requer um argumento."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Nome de espaço de nomes inválido"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Você pode apenas usar arquivos com opções de pontos de montagem"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Nenhuma especificação de processo fornecida"
+
+# "--all" e "--silent" referem-se a opções do fuser, não traduzir.
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "a opção \"--all\" não pode ser usada com a opção \"--silent\"."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Você não pode pesquisar apenas por sockets IPv4 e IPv6 ao mesmo tempo"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s USUÃRIO PID ACESSO COMANDO\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(desconhecido)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Não foi possível analisar o arquivo %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Não foi possível abrir /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Matar o processo %d? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Não foi possível matar o processo %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Não foi possível abrir um socket de rede.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Não foi possível localizar o número de dispositivo do socket.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Matar %s(%s%d)? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Enviar sinal para %s(%s%d)? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Não foi possível obter UID do status do processo\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Expressão regular inválida: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: ignorando ocorrência parcial %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d) morto com o sinal %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: nenhum processo localizado\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Uso: killall [OPÇÃO]... [--] NOME...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact exige ocorrência exata para nomes muito longos\n"
+" -I,--ignore-case ignora maiusculização nos nomes de processo\n"
+" -g,--process-group mata o grupo de processo em vez do processo\n"
+" -y,--younger-than mata processos mais novos que TEMPO\n"
+" -o,--older-than mata processos mais velhos que TEMPO\n"
+" -i,--interactive exibe confirmação antes de matar\n"
+" -l,--list lista todos os nomes de sinal conhecidos\n"
+" -q,--quiet não exibe avisos\n"
+" -r,--regexp interpreta NOME como uma expressão regular estendida\n"
+" -s,--signal SINAL envia este sinal em vez de SIGTERM\n"
+" -u,--user USUÃRIO mata apenas processos sendo executados pelo USUÃRIO\n"
+" -v,--verbose relata se o sinal foi enviado com sucesso\n"
+" -V,--version exibe informações de versão\n"
+" -w,--wait espera que os processos morram\n"
+" -n,--ns PID corresponde processos que pertencem aos mesmos\n"
+" espaços de nomes que o PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context EXPREG mata apenas processo(s) tendo contexto\n"
+" (precisa preceder outros argumentos)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Formato de tempo inválido"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Não foi possível localizar o usuário %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "PID de espaço de nomes inválido"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Expressão regular inválida: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: O número máximo de nomes é %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s não possui entradas de processos (não montado?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Erro ao anexar ao PID %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Uso: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean saída limpa com fluxos de 8 bits.\n"
+" -n, --no-headers não exibe leitura/gravação dos cabeçalhos "
+"fd.\n"
+" -c, --follow espia qualquer novo processo filho também.\n"
+" -t, --tgid espia threads em que tgid é igual a <pid>.\n"
+" -d, --duplicates-removed remove leitura/gravação duplicados da "
+"saída.\n"
+" -V, --version exibe informações de versão.\n"
+" -h, --help exibe esta ajuda.\n"
+"\n"
+" Pressione CTRL+C para finalizar a saída.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Uso: prtstat [opções] PID ...\n"
+" prtstat -V\n"
+"Exibe informações sobre um processo\n"
+" -r,--raw Exibe informações sem utilizar formatação\n"
+" -V,--version Exibe informações de versão e sai\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2020 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2020 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "executando"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "suspenso"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "suspenso por disco"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zumbi"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "interrompido"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "paginado"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "desconhecido"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Processo: %-14s\t\tEstado: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"IDs de processos, grupos e sessões\n"
+" ID processo: %d\t\t ID pai: %d\n"
+" ID grupo: %d\t\t ID sessão: %d\n"
+" ID grupo T: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Faltas de página\n"
+" Este processo (menor maior): %8lu %8lu\n"
+" Processos filho (menor maior): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Tempo de CPU\n"
+" Este processo (usu. sist. conv. blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Processos filho (usu. sist. conv.): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memória\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\tLimite RSS: %s\n"
+" Início cód.: %#-10lx\t\t Fim cód. : %#-10lx\n"
+" Início stack:%#-10lx\n"
+" Pont. stack (ESP): %#10lx\t\t Pont. Instr. (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Agendamento\n"
+" Política: %s\n"
+" Nice: %ld \t\tPrioridade RT: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf em print_stat falhou.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "O processo com PID %d não existe.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Não foi possível abrir o arquivo de análise para PID %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Não foi possível alocar memória para proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Não foi possível verificar arquivo de estado"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Opção inválida"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Você precisa fornecer ao menos um PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc não está montado, impossível analisar /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s está vazio (não montado?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Uso: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N tipo ]\n"
+" [ -A | -G | -U ] [ PID | USUÃRIO ]\n"
+" ou: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Exibe uma árvore de processos.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments mostra argumentos de linha de comando\n"
+" -A, --ascii usa caracteres ASCII no desenho de linhas\n"
+" -c, --compact-not não comprime subárvores idênticas\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TIPO colore processo por atributo\n"
+" (age)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids mostra ids de grupo de processos; implica em -c\n"
+" -G, --vt100 usa caracteres VT100 no desenho de linhas\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all realça o processo atual e seus ancestrais\n"
+" -H PID, --highlight-pid=PID\n"
+" realça este processo e seus ancestrais\n"
+" -l, --long não trunca linhas longas\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort ordena saída pelo PID\n"
+" -N TIPO, --ns-sort=TIPO\n"
+" ordena por este tipo de espaço de nomes\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids mostra PIDs; implica em -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents mostra os pais do processo selecionado\n"
+" -S, --ns-changes mostra transições de espaço de nomes\n"
+" -t, --thread-names mostra nomes completos de threads\n"
+" -T, --hide-threads oculta threads, mostra apenas processos\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes mostra transições de uid\n"
+" -U, --unicode usa caracteres UTF-8 (Unicode) no desenho de linhas\n"
+" -V, --version exibe informações da versão\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" mostra atributos de segurança\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID inicia deste PID; predefinido como 1 (init)\n"
+" USR mostra apenas árvores originadas de processos deste usuário\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM não está definido\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Não foi possível obter as habilidades do terminal\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "O arquivo procfs para o espaço de nomes %s não está disponível\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Nome de usuário inexistente: %s\n"
+
+#: src/pstree.c:1539
+#, fuzzy, c-format
+#| msgid "No processes found.\n"
+msgid "Process %d not found.\n"
+msgstr "Nenhum processo localizado.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Nenhum processo localizado.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Pressione Enter para fechar\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: sinal desconhecido; %s -l lista os sinais.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Uso: killall [ -Z CONTEXTO ] [ -u USUÃRIO ] [ -y TEMPO ] [ -o TEMPO ]\n"
+#~ " [ -eIgiqrvw ] [ -s SINAL | -SINAL ] NOME...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Uso: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N tipo ]\n"
+#~ " [ -A | -G | -U ] [ PID | USUÃRIO ]\n"
+#~ " ou: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger e Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Uso: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N tipo ]\n"
+#~ "Uso: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N tipo ]\n"
+#~ " [ -A | -G | -U ] [ PID | USUÃRIO ]\n"
+#~ " pstree -V\n"
+#~ "Exibe uma árvore de processos.\n"
+#~ "\n"
+#~ " -a, --arguments mostra argumentos de linha de comando\n"
+#~ " -A, --ascii usa caracteres ASCII no desenho de linhas\n"
+#~ " -c, --compact não comprime subárvores idênticas\n"
+#~ " -h, --highlight-all realça o processo atual e seus ancestrais\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID realça este processo e seus ancestrais\n"
+#~ " -g, --show-pgids mostra ids de grupo do processo; implica -c\n"
+#~ " -G, --vt100 usa caracteres VT100 no desenho de linhas\n"
+#~ " -l, --long não trunca linhas longas\n"
+#~ " -n, --numeric-sort ordena saída pelo PID\n"
+#~ " -N tipo,\n"
+#~ " --ns-sort=tipo ordena pelo tipo do namespace (ipc, mnt, net, pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids mostra PIDs; implica -c\n"
+#~ " -s, --show-parents mostra os pais do processo selecionado\n"
+#~ " -S, --ns-changes mostra transições de namespace\n"
+#~ " -t, --thread-names mostra nomes de threads longas\n"
+#~ " -T, --hide-threads oculta threads, mostra apenas processos\n"
+#~ " -u, --uid-changes mostra transições de UID\n"
+#~ " -U, --unicode usa caracteres UTF-8 (Unicode) no desenho de "
+#~ "linhas\n"
+#~ " -V, --version exibe informações de versão\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger e Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger e Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: pidof [ -eg ] NOME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e exigir ocorrência exata para nomes muito longos;\n"
+#~ " ignorar se a linha de comando está indisponível\n"
+#~ " -g mostrar ID do grupo de processo em vez do ID de processo\n"
+#~ " -V exibir informações de versão\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 0000000..8c70dfb
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,25 @@
+# Sed script that removes the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without any warranty.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.gmo b/po/ro.gmo
new file mode 100644
index 0000000..a575057
--- /dev/null
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..8243044
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,865 @@
+# Mesajele în limba română pentru pachetul psmisc.
+# Copyright (C) 2003, 2022 Free Software Foundation, Inc.
+# Acest fișier este distribuit sub aceeași licență ca și pachetul psmisc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Laurentiu Buzdugan <lbuz@rolix.org>, 2005.
+# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022 - 2024.
+#
+# Cronologia traducerii fiÈ™ierului „psmiscâ€:
+# Traducerea inițială, făcută de LB, pentru versiunea psmisc 21.6pre1.
+# Actualizare a mesajelor, de la fiÈ™ierul „psmisc-23.4rc1.potâ€.
+# Actualizare a codării caracteror, la codarea de caractere UTF-8.
+# Actualizare a diacriticelor de la „cu sedilă†la „cu virgulăâ€.
+# Actualizare a algoritmului formelor de plural (de la „două†la „treiâ€).
+# NU și a mesajelor traduse (acestea au rămas neschimbate).
+# Eliminare a mesajelor ce-au dispărut în ultima versiune.
+# Actualizări realizate de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 15.01.2022.
+# Actualizare a traducerii pentru versiunea 23.5rc1, făcută de R-GC, mar-2022.
+# Actualizare a traducerii pentru versiunea 23.6-rc1, făcută de R-GC, dec-2022.
+# Actualizare a traducerii pentru versiunea 23.7-rc1, făcută de R-GC, feb-2024.
+# Actualizare a traducerii pentru versiunea Y, făcută de X, Y(anul).
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-13 18:35+0100\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
+
+# R-GC, scrie:
+# am făcut unele modificări, față de traducerea
+# inițială, pornind de la sugestiile făcute de DȘ:
+# 1. „-n,--namespace SPAÈšIU caută în acest spaÈ›iu de nume (file, udp, sau tcp)â€
+# aici „file†trebuie să devină „fiÈ™ierâ€, spune DȘ;
+# încep să „investighez†printre traducerile făcute
+# de celelalte echipe(majoritatea au tradus «file»),
+# și în final descopăr, în traducerea bulgară,
+# o idee de-a îmbunătăți traducerea făcută,
+# așa cum se poate vedea.
+# 2. "Utilizare: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPAÈšIU]\n"
+# " [-k [-i] [-SEMNAL]] NUME...\n"
+# → „SIGNAL†rebuie să rămână netradus, este detaliat mai jos și explicat ca fiind o comandă;
+# spune DȘ.
+# încă o dată mă pun să „investighezâ€, È™i în
+# traducerea făcută de Benno S, găsesc răspunsul
+# pe care-l bănuiam:
+# „-SIGNAL trimite acest semnal în loc de SIGKILL†→ „-SEMNAL trimite acest semnal în loc de semnalul†SIGKILL
+# ***
+# am corectat de la „inod-uri†la „noduri-iâ€,
+# pentru a fi în concordanță cu celelalte
+# traduceri, și mai ales cu:
+#
+# «inode este (index node)», adică:
+# „nod de indexâ€, aÈ™a că am folosit forma,
+# prescurtată folosită, adaptată la limba
+# română → « nod-i ».
+# Sursa folosită:
+# https://en.wikipedia.org/wiki/Inode, aici se
+# găsește explicația „etimologică :)†a
+# cuvîntului, oferită de
+# Dennis Ritchie, «autorul»
+# acestui cuvînt.
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Utilizare: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPAÈšIU]\n"
+" [-k [-i] [-SEMNAL]] NUME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Afișează ce procese utilizează fișierele, soclurile sau sistemele de\n"
+"fișiere specificate.\n"
+"\n"
+" -a,--all afișează și fișierele neutilizate\n"
+" -i,--interactive întreabă înainte de a omorî (ignorată fără „-kâ€)\n"
+" -I,--inode utilizează întotdeauna noduri-i pentru a compara "
+"fișierele\n"
+" -k,--kill omoară procesele care accesează fișierul numit\n"
+" -l,--list-signals listează numele semnalelor disponibile\n"
+" -m,--mount afișează toate procesele ce folosesc sistemul de\n"
+" fișiere sau dispozitivul bloc specificat\n"
+" -M,--ismountpoint îndeplinește cererea numai dacă NUME este un\n"
+" punct de montare\n"
+" -n,--namespace SPAȚIU caută în acest SPAȚIU de nume (poate fi\n"
+" fișier, udp, sau tcp)\n"
+" -s,--silent operare silențioasă\n"
+" -SEMNAL trimite acest semnal în loc de semnalul SIGKILL\n"
+" -u,--user afișează ID-uri de utilizator\n"
+" -v,--verbose ieșire detaliată\n"
+" -w,--writeonly omoară doar procesele cu acces de scriere\n"
+" -V,--version afișează informații despre versiune\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 caută numai socluri(sockets) IPv4\n"
+" -6,--ipv6 caută numai socluri(sockets) IPv6\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" nume udp/tcp: [port_local][,[gazdă_rmt][,[port_rmt]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Drepturi de autor © 1993-2024 Werner Almesberger și Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc vine fără ABSOLUT NICI O GARANȚIE.\n"
+"Acesta este software liber, și sunteți binevenit să îl redistribuiți\n"
+"în conformitate cu termenii GNU General Public License.\n"
+"Pentru informații suplimentare referitoare la aceste chestiuni,\n"
+"consultați fișierele numite COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Nu se poate deschide directorul «/proc»: %s\n"
+
+# R-GC, scrie:
+# m-am uitat peste multe alte traduceri, iar cea
+# care mi s-a părut că descrie cel mai bine idea
+# autorului, a fost traducerea făcută de
+# Benno Schulenberg.
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Memorie disponibilă insuficientă pentru a procesa procesul găsit: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Numele fișierului specificat %s, nu există.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Nu se poate determina starea lui %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Nu se poate rezolva portul local %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Port local necunoscut AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Nu se poate deschide fiÈ™ierul de protocol „%sâ€: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Numele fișierului specificat %s nu este un punct de montare.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Opțiune nevalidă %s\n"
+
+# R-GC, scrie:
+# încă o traducere a unui mesaj, avînd ca sursă de
+# inspirație, traducerea făcută de Benno Schulenberg
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "OpÈ›iunea spaÈ›iului de nume „-nâ€, necesită un argument."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Spațiu de nume nevalid"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Puteți utiliza numai fișiere cu opțiuni de punct de montare"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Nu s-a specificat niciun proces"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "nu toate opțiunile pot fi utilizate cu opțiunea silențioasă."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"Nu puteți căuta doar socluri(sockets) IPv4 și doar socluri(sockets) IPv6 în "
+"același timp"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s UTILIZATOR PID ACCES COMANDÄ‚\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(necunoscut)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Nu se poate determina starea fișierului %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Nu se poate deschide «/proc/net/unix»: %s\n"
+
+# R-GC, scrie:
+# sugestie/corecție venită de la DȘ:
+# „msgstr "Terminați procesul %d ? (d/N) "
+# → până aici a fost „kill†= â€a omorîâ€, ar trebui să fie tot aÈ™a È™i aiciâ€.
+# Ai dreptate, Daniel, acest mesaj a fost tradus de
+# LB(printre puținele pe care le-a tradus), și la
+# corectrea ce-am făcut-o înainte de ați trimite
+# fișierul la corectat, mi-a scăpat...
+# O aplic acum...
+# Așa fișierul e coerent...,
+# exact cum îmi place mie :)ˇ
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Omorâți procesul %d ? (d/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Nu s-a putut omorî procesul %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Nu se poate deschide un soclu(socket) de rețea.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Nu se poate găsi numărul dispozitivului soclu(socket).\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Omorâți %s(%s%d)? (d/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Trimiteți semnalul %s(%s%d) ? (d/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Nu se poate obține UID-ul de la starea procesului\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Expresie regulată greșită: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: am ignorat potrivirea parțială %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "A fost omorât %s(%s%d) cu semnalul %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: nu a fost găsit niciun proces\n"
+
+# DȘ, spune:
+# „msgstr "Utilizare: killall [ OPȚIUNE... ] [ -- ] NUME...\n"
+# → păstrează formatul original... punctele în afara parantezelor drepteâ€
+# Ai perfectă dreptate, Daniel, corecție aplicată!
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Utilizare: killall [ OPÈšIUNE]... [ -- ] NUME...\n"
+
+# DȘ, spune:
+# 1. „" -i,--interactive cere confirmare înainte de-a omorî\n"
+# → „de a†fără cratimăâ€
+# Corecție aplicată!
+# 2. „" -I,--ignore-case ignoră diferența dintre MAJUS./minus în numele pro-\n"
+# " cesului.\n"
+# → poÈ›i muta tot cuvântul pe linia următoare, evitând despărÈ›irea în silabeâ€
+# Corecție, aplicată!; motivul pentru care am folo-
+# sit separarea în silabe, a fost aceea de-a crea
+# iluzia unui dreptunghi, pentru mesajul ce apare
+# la rularea comenzii «killall --help».
+# Așa am observat o greșeală de dactilografiere,
+# în mesajul următor:
+# „(trebuie să precedă alte argumente)†→
+# „(trebuie să preceadă alte argumente)â€
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V --version\n"
+"\n"
+" -e,--exact cere potrivire exactă pentru nume foarte lungi;\n"
+" -I,--ignore-case ignoră diferența dintre MAJUS./minus în numele\n"
+" procesului.\n"
+" -g,--process-group omoară grupul procesului în loc de un proces\n"
+" -y,--younger-than omoară procesele mai recente de ORA\n"
+" -o,--older-than omoară procesele mai vechi de ORA\n"
+" -i,--interactive cere confirmare înainte de a omorî\n"
+" -l,--list listează toate numele de semnale cunoscute\n"
+" -q,--quiet nu afișează mesajele de eroare\n"
+" -r,--regexp interpretează NUME ca o expresie regulată extinsă\n"
+" -s,--signal SEMNAL trimite acest semnal în loc de SIGTERM\n"
+" -u,--user UTILIZATOR omoară doar procesul(ele) ce rulează ca UTILIZATOR\n"
+" -v,--verbose raportează dacă semnalul a fost trimis cu succes\n"
+" -V,--version afișează informații despre versiune\n"
+" -w,--wait așteaptă ca procesele să moară\n"
+" -n,--ns PID numai procesele care aparțin aceluiași spațiu de nume\n"
+" ca PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context EXPREG omoară doar procesele cu acest context\n"
+" (trebuie să preceadă alte argumente)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Format de oră nevalid"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Nu se poate găsii utilizatorul %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "PID nevalid pentru spațiul de nume"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Expresie regulată greșită: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Numărul maxim de nume este %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s nu are intrări de proces (nu este montat?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Eroare la atașarea procesului cu id-ul %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Drepturi de autor © 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Utilizare: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean scoate fluxuri curate de 8 biți.\n"
+" -n, --no-headers nu afișează citirea/scrierea din antetele "
+"fd.\n"
+" -c, --follow aruncă o privire și asupra oricărui proces\n"
+" copil nou.\n"
+" -t, --tgid aruncă o privire la toate firele în care "
+"tgid\n"
+" este egal cu <pid>.\n"
+" -d, --duplicates-removed elimină citirile/scrierile duplicate de la "
+"ieșire.\n"
+" -V, --version imprimă informații despre versiune.\n"
+" -h, --help imprimă acest ajutor.\n"
+"\n"
+" Apăsați «CTRL-C» pentru a termina ieșirea.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Utilizare: prtstat [opțiuni] PID ...\n"
+" prtstat -V\n"
+"Imprimă informații despre un proces\n"
+" -r,--raw Afișează informație neprelucrată despre proces\n"
+" -V,--version Afișează informații despre versiune și iese\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Drepturi de autor © 2009-2024 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "rulează"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "adormit"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "așteptând accesul la disc"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "urmărit(traced)"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "paginare memorie"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "necunoscut"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Proces: %-14s\t\tStare: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tFire exec.: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"ID-urile de Proces, Grup și Sesiune\n"
+" ID Proces: %d\t\t ID Părinte: %d\n"
+" ID Grup: %d\t\t ID Sesiune: %d\n"
+" T ID Grup: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Erori în pagină\n"
+" Acest proces (minor major): %8lu %8lu\n"
+" Procese copil (minor major): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Timpii CPU\n"
+" Acest proces (utilizator de sistem invitat blkio): %6.2f %6.2f %6.2f "
+"%6.2f\n"
+" Procese copil (utilizator de sistem invitat): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Memorie\n"
+" Dimensiune virtuală: %-10s\n"
+" RSS: %-10s \t\tLimită RSS: %s\n"
+" ÃŽnceputul codului: %#-10lx\t\tTerminare cod: %#-10lx\n"
+" Începutul stocării: %#-10lx\n"
+" Indicator stocare (ESP): %#10lx\t\t\tIndic. instruc. (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Planificare\n"
+" Politică: %s\n"
+" Curtoazie: %ld \t\t Prioritate RT: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf în print_stat a eșuat.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Procesul cu pid %d nu există.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Nu se poate deschide fișierul de stare pentru pid-ul %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Nu se poate aloca memorie pentru proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Nu se poate scana fișierul de stare"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Opțiune nevalidă"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Trebuie să furnizați cel puțin un PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"«/proc» nu este montat, nu se poate determina starea lui «/proc/self/stat».\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s este gol (nu este montat ?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Utilizare: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N tip ]\n"
+" [ -A | -G | -U ] [ PID | UTILIZATOR ]\n"
+" sau: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Afișează un arbore de procese.\n"
+"\n"
+
+# R-GC, scrie:
+# am tradus inițial:
+# „use ASCII line drawing charactersâ€
+# ca:
+# „utilizează caractere pentru trasarea de linii ASCIIâ€
+# După ce-am citit de cîteva ori cu voce tare, fraza,
+# am început să-mă întreb:
+# - Și ce dracu, au vrut să spună autorii, cu asta?
+# După ce-am întors, problema, pe toate fețele,
+# am ajuns la concluzia prezentată; traducerea
+# ce apare în mesajul afișat la rularea comenzii:
+# «pstree --help». (se repetă pentru VT100)
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments afișează argumentele liniei de comandă\n"
+" -A, --ascii utilizează trasarea de linii ASCII pentru caractere\n"
+" -c, --compact-not nu compactează subarborii identici\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TIP colorează procesele după atributul\n"
+" (vârstă)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids afiÈ™ează ID-urile grupului de procese; implică „-câ€\n"
+" -G, --vt100 utilizează trasarea de linii VT100 pentru caractere\n"
+
+# DȘ, spune:
+# „" -h, --highlight-all highlight evidențiază procesul actual și antecesorii "
+# → al 2-lea „highlight†nu trebuie să apară în limba românăâ€
+# R-GC, răspunde:
+# „Scuze am folosit «Ctrl + b», pentru a copia
+# mesajul original la traducere, È™i la marcarea textului ce trebuia tradus, mi-a scăpat „highlightâ€
+# de la marcare...â€
+# Mulțumesc, corecție aplicată!
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all highlight evidențiază procesul actual și antecesorii "
+"săi\n"
+" -H PID, --highlight-pid=PID\n"
+" evidențiază procesul acesta și antecesorii săi\n"
+" -l, --long nu trunchiază liniile lungi\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort sortează ieșirea după PID\n"
+" -N TYPE, --ns-sort=TIP\n"
+" sortează rezultatul după spațiul de nume:\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids afiÈ™ează PID-urile; implică „-câ€\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents afișează părinții procesului selectat\n"
+" -S, --ns-changes afișează tranzițiile spațiului de nume\n"
+" -t, --thread-names afișează numele complete ale firelor\n"
+" -T, --hide-threads ascunde firele, afișează doar procesele\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes afișează tranzițiile uid\n"
+" -U, --unicode utilizează trasarea de linii UTF-8 (Unicode) pentru "
+"caractere\n"
+" -V, --version afișează informații despre versiune\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" afișează atributele de securitate\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID începe de la procesul cu acest ID; prestabilit este 1 (init)\n"
+" UTILIZATOR afișează numai arbori cu rădăcina în procesele acestui "
+"utilizator\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM nu este definit\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Nu se pot obține caracteristicile terminalului\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "Fișierul «procfs» pentru spațiul de nume %s nu este disponibil\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Nici un utilizator cu acest nume: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Procesul %d nu a fost găsit.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Nu a fost găsit nici un proces.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Apăsați tasta «Enter» pentru a închide\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: semnal necunoscut; %s -l listează semnalele.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Drepturi de autor © 1993-2002 Werner Almesberger și Craig Small\n"
+#~ "\n"
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644
index 0000000..90b010d
--- /dev/null
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..22bad86
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,892 @@
+# translation of psmisc-22.11-pre1.ru.po to Russian
+# Russian Translation for psmisc files
+# Copyright (C) 2002, 2009, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Ilya Evseev <evseev@altlinux.ru>, 2005.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2012, 2013, 2014, 2016, 2018, 2019, 2021, 2022, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.6-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2023-01-05 09:41+0300\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <gnu@d07.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 20.12.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"ИÑпользование: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n ОБЛÐСТЬ]\n"
+" [-k [-i] [-СИГÐÐЛ]] ИМЯ…\n"
+" fuser -l\n"
+" fuser -V\n"
+"Показывает какие процеÑÑÑ‹ иÑпользуют указанные файлы, Ñокеты\n"
+"или файловые ÑиÑтемы.\n"
+"\n"
+" -a,-all показывать также неиÑпользуемые файлы\n"
+" -i,--interactive Ñпрашивать подтверждение Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ (игнор. без -k)\n"
+" -I,--inode вÑегда иÑпользовать иноды Ð´Ð»Ñ ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²\n"
+" -k,--kill завершить процеÑÑÑ‹, обращающиеÑÑ Ðº заданному файлу\n"
+" -l,--list-signals показать допуÑтимые имена Ñигналов\n"
+" -m,--mount показать процеÑÑÑ‹, иÑпользующие указанные файловые\n"
+" ÑиÑтемы или блочные уÑтройÑтва\n"
+" -M,--ismountpoint выполнÑÑ‚ÑŒ запроÑ, только еÑли ИМЯ ÑвлÑетÑÑ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹\n"
+" монтированиÑ\n"
+" -n,--namespace ОБЛÐСТЬ\n"
+" иÑкать в указанном проÑтранÑтве имён (file, udp или "
+"tcp)\n"
+" -s,--silent не выводить ÑообщениÑ\n"
+" -СИГÐÐЛ поÑылать указанный Ñигнал вмеÑто SIGKILL\n"
+" -u,--user показывать идентификатор Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (uid)\n"
+" -v,--verbose включить подробные ÑообщениÑ\n"
+" -w,--writeonly завершать только процеÑÑÑ‹ Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¼ на запиÑÑŒ\n"
+" -V,--version показать информацию о верÑии\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 поиÑк только Ñреди Ñокетов IPv4\n"
+" -6,--ipv6 поиÑк только Ñреди Ñокетов IPv6\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" имена udp/tcp: [локальный_порт][,[удалённый_узел][,[удалённый_порт]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc поÑтавлÑетÑÑ Ð‘Ð•Ð— КÐКИХ-ЛИБО ГÐРÐÐТИЙ.\n"
+"Это ÑÐ²Ð¾Ð±Ð¾Ð´Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°; вы можете раÑпроÑтранÑÑ‚ÑŒ её на уÑловиÑÑ…\n"
+"УниверÑальной общеÑтвенной лицензии GNU.\n"
+"ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± Ñтих уÑловиÑÑ… приведена в файле COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Ðе удалоÑÑŒ открыть каталог /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Ðе удалоÑÑŒ выделить памÑÑ‚ÑŒ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ñемого proc: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Указанное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° %s не ÑущеÑтвует.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Ðе удалоÑÑŒ выполнить функцию stat Ð´Ð»Ñ %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Ðе удалоÑÑŒ определить Ð¸Ð¼Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ порта %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "ÐеизвеÑтный локальный порт AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Ðе удалоÑÑŒ открыть файл протокола \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Указанное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° %s не ÑвлÑетÑÑ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ монтированиÑ.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: неправильный параметр %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Ð”Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° облаÑти требуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Ðеверное Ð¸Ð¼Ñ Ð¾Ð±Ð»Ð°Ñти"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Ð’Ñ‹ можете иÑпользовать файлы только Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ mountpoint"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Ðе указан процеÑÑ"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr ""
+"Параметр показа вÑех файлов Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать вмеÑте Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ "
+"Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñообщений."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑÑ‚ÑŒ поиÑк только по Ñокетам IPv4 и IPv6 одновременно"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s ПОЛЬЗ-ЛЬ PID ДОСТУП КОМÐÐДÐ\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(неизвеÑтно)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Ðе удалоÑÑŒ выполнить функцию stat Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Ðе удалоÑÑŒ открыть /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Завершить процеÑÑ %d? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Ðе удалоÑÑŒ завершить процеÑÑ %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Ðе удалоÑÑŒ открыть Ñетевой Ñокет.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Ðе удалоÑÑŒ найти номер уÑтройÑтва Ñокета.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Завершить %s(%s%d)? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "ПоÑлать Ñигнал %s(%s%d)? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: не удалоÑÑŒ получить UID из ÑоÑтоÑÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑа\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: неправильное регулÑрное выражение: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: пропуÑк чаÑтичного ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d) завершён Ñигналом %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: процеÑÑ Ð½Ðµ найден\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "ИÑпользование: killall [ПÐРÐМЕТР]… [--] ИМЯ…\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact требовать полного ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ñ‡ÐµÐ½ÑŒ длинных имён\n"
+" -I,--ignore-case игнорировать региÑÑ‚Ñ€ Ñимволов в именах процеÑÑов\n"
+" -g,--process-group завершать группу процеÑÑа вмеÑто одного процеÑÑа\n"
+" -y,--younger-than завершить процеÑÑÑ‹, новее чем заданного ВРЕМЕÐИ\n"
+" -o,--older-than завершить процеÑÑÑ‹, Ñтарее чем заданного ВРЕМЕÐИ\n"
+" -i,--interactive запрашивать подтверждение перед завершением "
+"процеÑÑов\n"
+" -l,--list вывеÑти ÑпиÑок допуÑтимых имён Ñигналов\n"
+" -q,--quiet не показывать подробные ÑообщениÑ\n"
+" -r,--regexp раÑÑматривать ИМЯ как раÑширенное регулÑрное "
+"выражение\n"
+" -s,--signal СИГÐÐЛ поÑылать указанный СИГÐÐЛ, а не SIGTERM\n"
+" -u,--user ПОЛЬЗВ завершить процеÑÑ(Ñ‹), запущенный только "
+"ПОЛЬЗОВÐТЕЛЕМ\n"
+" -v,--verbose уведомлÑÑ‚ÑŒ только при уÑпешной отправке Ñигнала\n"
+" -V,--version показать информацию о верÑии\n"
+" -w,--wait ожидать Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑов\n"
+" -n,--ns PID вÑе процеÑÑÑ‹, принадлежащие тем же проÑтранÑтвам "
+"имён\n"
+" что и PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context РЕГВЫР завершать только процеÑÑ(Ñ‹) Ñ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñщим контекÑтом\n"
+" (должен указыватьÑÑ Ñ€Ð°Ð½ÑŒÑˆÐµ оÑтальных параметров)\n"
+"\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "неправильный формат времени"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Пользователь %s не найден\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Ðеверный PID проÑтранÑтва имён"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Ðеправильное регулÑрное выражение: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: количеÑтво имён не может превышать %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: в %s нет запиÑей о процеÑÑах (не Ñмонтирован?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Ошибка приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº процеÑÑу Ñ pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"ИÑпользование: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean не ÑбраÑывать 8-й бит в потоках\n"
+" -n, --no-headers не отображать fd заголовки при чтении/запиÑи\n"
+" -c, --follow наблюдать также за вÑеми новыми\n"
+" дочерними процеÑÑами\n"
+" -t, --tgid наблюдать за вÑеми нитÑми, у которых\n"
+" tgid равен <pid>\n"
+" -d, --duplicates-removed удалÑÑ‚ÑŒ повторÑющиеÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ чтениÑ/запиÑи\n"
+" при выводе\n"
+" -V, --version вывеÑти информацию о верÑии\n"
+" -h, --help вывеÑти Ñту Ñправку\n"
+"\n"
+" Ðажмите CTRL-C Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"ИÑпользование: prtstat [параметры] PID …\n"
+" prtstat -V\n"
+"Выводит информацию о процеÑÑе\n"
+" -r,--raw вывеÑти информацию в необработанном виде\n"
+" -V,--version вывеÑти информацию о верÑии и закончить работу\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2022 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright (C) 2009-2022 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "работает"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "Ñпит"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "Ñпит из-за диÑка"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "зомби"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "траÑÑируетÑÑ"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "замещает Ñтраницы"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "неизвеÑтно"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"ПроцеÑÑ: %-14s\t\tСоÑтоÑние: %c (%s)\n"
+" ЦП#: %-3d\t\tTTY: %s\tÐитей: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"ID процеÑÑа, группы и ÑеанÑа\n"
+" ID процеÑÑа: %d\t\t ID родителÑ: %d\n"
+" ID группы: %d\t\t ID ÑеанÑа: %d\n"
+" ID T-группы: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Страничные отказы\n"
+" Этот процеÑÑ (первичный вторичный): %8lu %8lu\n"
+" Дочерние процеÑÑÑ‹ (первичный вторичный): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"ПроцеÑÑорное времÑ\n"
+" Этот процеÑÑ (польз. ÑиÑтем. гоÑтевое blkio): %6.2f %6.2f %6.2f "
+"%6.2f\n"
+" Дочерние процеÑÑÑ‹ (польз. ÑиÑтем. гоÑтевое): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"ПамÑÑ‚ÑŒ\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t Предел RSS: %s\n"
+" Ðачало кода: %#-10lx\t\t Конец кода: %#-10lx\n"
+" Ðачало Ñтека: %#-10lx\n"
+" Указатель Ñтека (ESP): %#10lx\t Указатель инÑÑ‚Ñ€. (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Планировка\n"
+" Политика: %s\n"
+" УÑтупчивоÑÑ‚ÑŒ: %ld \t\t Приоритет RT: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf в print_stat завершилаÑÑŒ неудачно.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "ПроцеÑÑ Ñ pid %d не ÑущеÑтвует.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Ðе удалоÑÑŒ открыть файл stat Ð´Ð»Ñ pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Ðе удалоÑÑŒ выделить памÑÑ‚ÑŒ Ð´Ð»Ñ proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Ðе удалоÑÑŒ проÑканировать файл stat"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "неправильный параметр"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Вы должны указать не менее одного PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc не Ñмонтирован, возможно выполнить stat /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s пуÑÑ‚ (не Ñмонтирован?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"ИÑпользование: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N тип ]\n"
+" [ -A | -G | -U ] [ PID | ПОЛЬЗОВÐТЕЛЬ ]\n"
+" или: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Показывает дерево процеÑÑов.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments показывать аргументы командной Ñтроки\n"
+" -A, --ascii иÑпользовать ASCII-Ñимволы Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¹\n"
+" -c, --compact-not не Ñжимать одинаковые поддеревьÑ\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=ТИП раÑкрашивать процеÑÑÑ‹ по атрибуту\n"
+" (возраÑÑ‚)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids показывать идентификаторы групп процеÑÑа;\n"
+" включает -c\n"
+" -G, --vt100 иÑпользовать Ñимволы риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¹ от VT100\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all подÑветить текущий процеÑÑ Ð¸ его предков\n"
+" -H PID,\n"
+" --highlight-pid=PID подÑветить процеÑÑ PID и его предков\n"
+" -l, --long не обрезать длинные Ñтроки\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort Ñортировать вывод по PID\n"
+" -N тип,\n"
+" --ns-sort=тип Ñортировать по типу проÑтранÑтва имён\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids показывать идентификаторы процеÑÑов (PID); включает -"
+"c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents показывать родителей выбранного процеÑÑа\n"
+" -S, --ns-changes показывать переходы проÑтранÑтв имён\n"
+" -t, --thread-names показывать полные имена нитей\n"
+" -T, --hide-threads Ñкрывать нити, показывать только процеÑÑÑ‹\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes показывать переходы идентификаторов пользователей\n"
+" -U, --unicode иÑпользовать Ñимволы риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¹ UTF-8 (Юникод)\n"
+" -V, --version показать информацию о верÑии\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" показывать атрибуты безопаÑноÑти\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID начинать от указанного PID; по умолчанию 1 (init)\n"
+" ПОЛЬЗОВÐТЕЛЬ показать только дерево процеÑÑов указанного "
+"пользователÑ\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ TERM не уÑтановлена\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Ðе удалоÑÑŒ определить характериÑтики терминала\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "недоÑтупен файл procfs Ð´Ð»Ñ Ð¿Ñ€Ð¾ÑтранÑтва имён %s\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "ÐеизвеÑтное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "ПроцеÑÑ %d не найден.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Ðе найдено ни одного процеÑÑа.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Ðажмите Enter Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð°\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: неизвеÑтный Ñигнал; %s -l выводит ÑпиÑок доÑтупных Ñигналов.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "ИÑпользование: killall [-Z КОÐТЕКСТ] [-u ПОЛЬЗОВÐТЕЛЬ] [ -o ВРЕМЯ ]\n"
+#~ " [ -eIgiqrvw ] [ -s SIGNAL | -СИГÐÐЛ ] ИМЯ…\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "ИÑпользование: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N тип ]\n"
+#~ " [ -A | -G | -U ] [ PID | ПОЛЬЗОВÐТЕЛЬ ]\n"
+#~ " или: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "ИÑпользование: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N тип ]\n"
+#~ "ИÑпользование: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N тип ]\n"
+#~ " [ -A | -G | -U ] [ PID | ПОЛЬЗОВÐТЕЛЬ ]\n"
+#~ " pstree -V\n"
+#~ "Показывает дерево процеÑÑов.\n"
+#~ "\n"
+#~ " -a, --arguments показывать аргументы командной Ñтроки\n"
+#~ " -A, --ascii иÑпользовать ASCII-Ñимволы Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¹\n"
+#~ " -c, --compact не Ñжимать одинаковые поддеревьÑ\n"
+#~ " -h, --highlight-all выделÑÑ‚ÑŒ цветом текущий процеÑÑ Ð¸ его предков\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID выделить цветом процеÑÑ PID и его предков\n"
+#~ " -g, --show-pgids показывать идентификаторы групп процеÑÑа;\n"
+#~ " включает -c\n"
+#~ " -G, --vt100 иÑпользовать Ñимволы терминала VT100 Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ "
+#~ "линий\n"
+#~ " -l, --long не обрезать длинные Ñтроки\n"
+#~ " -n, --numeric-sort Ñортировать вывод по PID\n"
+#~ " -N тип,\n"
+#~ " --ns-sort=тип Ñортировать по типу проÑтранÑтва имён\n"
+#~ " (cgroup, ipc, mnt, net, pid, user, uts)\n"
+#~ " -p, --show-pids показывать идентификаторы процеÑÑов (PID); включает "
+#~ "-c\n"
+#~ " -s, --show-parents показывать родителей выбранного процеÑÑа\n"
+#~ " -S, --ns-changes показывать переходы проÑтранÑтв имён\n"
+#~ " -t, --thread-names показывать полные имена нитей\n"
+#~ " -T, --hide-threads Ñкрывать нити, показывать только процеÑÑÑ‹\n"
+#~ " -u, --uid-changes показывать переходы идентификаторов пользователей\n"
+#~ " -U, --unicode иÑпользовать Ñимволы UTF-8 (Юникод) Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ "
+#~ "линий\n"
+#~ " -V, --version показать информацию о верÑии\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ИÑпользование: pidof [ -eg ] ИМЯ…\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e требовать полного ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ñ‡ÐµÐ½ÑŒ длинных имён;\n"
+#~ " игнорировать, еÑли ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока недоÑтупна\n"
+#~ " -g показывать идентификатор группы вмеÑто идентификатора "
+#~ "процеÑÑа\n"
+#~ " -V показать информацию о верÑии\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
diff --git a/po/sr.gmo b/po/sr.gmo
new file mode 100644
index 0000000..299cbeb
--- /dev/null
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..d78a2cf
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,846 @@
+# Serbian translation of psmisc.
+# Copyright © 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2012—2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-23.6-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2023-02-26 09:04+0100\n"
+"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <(nothing)>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Gtranslator 41.0\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Употреба: fuser [-fMuv] [-a|-s] [-4|-6] [-c|-m|-n РÐЗМÐК] [-k [-i] [-"
+"СИГÐÐЛ]] ÐÐЗИВ...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Приказује који процеÑи кориÑте именоване датотеке, прикључнице, или ÑиÑтеме "
+"датотека.\n"
+"\n"
+" -a,--all такође приказује неупотребљене датотеке\n"
+" -i,--interactive пита пре него што убије (занемарено без -k)\n"
+" -I,--inode кориÑти увек и-чворове за поређење датотека\n"
+" -k,--kill убија процеÑе приÑтупајући именованој датотеци\n"
+" -l,--list-signals наводи називе доÑтупног Ñигнала\n"
+" -m,--mount приказује Ñве процеÑе кориÑтећи именоване ÑиÑтеме\n"
+" датотека или блок уређај\n"
+" -M,--ismountpoint иÑпуњава захтев Ñамо ако је ÐÐЗИВ тачка качења\n"
+" -n,--namespace ПРОСТОР тражи у овим проÑторима назива (датотека, удп, или "
+"тцп)\n"
+" -s,--silent нечујна радња\n"
+" -SIGNAL шаље овај Ñигнал умеÑто СИГУБИЈ\n"
+" -u,--user приказује ИБ кориÑника\n"
+" -v,--verbose опширан излаз\n"
+" -w,--writeonly убија Ñамо процеÑе Ñа правом приÑтупа\n"
+" -V,--version приказује обавештење о издању\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 тражи Ñамо ИПв4 прикључнице\n"
+" -6,--ipv6 тражи Ñамо ИПв6 прикључнице\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" удп/тцп називе: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (ПСмиÑц) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"ÐуторÑка права © 1993-2022 Вернер ÐлмеÑбергер и Крег Смол\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"ПСмиÑц долази без БИЛО КÐКВЕ ГÐРÐÐЦИЈЕ.\n"
+"Ово је Ñлободан Ñофтвер, и можете да га раÑподељујете\n"
+"под одредбама ГÐУ-ове Опште јавне лиценце.\n"
+"Да Ñазнате више о овоме, погледајте датотеку под називом „COPYING“.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Ðе могу да отворим „/proc“ директоријум: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Ðе могу да доделим меморију одговарајућем проку: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Ðаведени назив датотеке %s не поÑтоји.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Ðе могу да добијем податке о %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Ðе могу да решим локални прикључак %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Ðепознати локални порт ÐФ %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Ðе могу да отворим датотеку протокола „%s“: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Ðаведени назив датотеке „%s“ није прикључна тачка.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: неиÑправна опција „%s“\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Опција проÑтора назива захтева аргумент."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "ÐеиÑпрван назив проÑтора назива"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Можете Ñамо да кориÑтите датотеке Ñа опцијама тачке качења"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Ðије дата одредница процеÑа"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "Ñве опције не могу бити коришћене Ñа тихом опцијом."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Ðе можете да тражите Ñамо ИПв4 и Ñамо ИПв6 прикључке у иÑто време"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s КОРИСÐИК ÐÐРЕДБРПРИСТУПРПИБ-у\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(непознато)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Ðе могу да добијем податке о датотеци %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Ðе могу да отворим „/proc/net/unix“: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Да убијем Ð¿Ñ€Ð¾Ñ†ÐµÑ %d ? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Ðе могу да убијем Ð¿Ñ€Ð¾Ñ†ÐµÑ %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Ðе могу да отворим мрежни прикључак.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Ðе могу да пронађем број уређаја прикључка.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Да убијем %s(%s%d) (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Да обавеÑтим %s(%s%d) (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "убијÑве: Ðе могу да добавим УИБ из Ñтања процеÑа\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "убијÑве: Лош регуларни израз: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "убијÑве: преÑкачем делимично поклапање %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Убио Ñам %s(%s%d) Ñа Ñигналом %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: ниÑам пронашао процеÑ\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Употреба: killall [ОПЦИЈÐ]... [--] ÐÐЗИВ...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact захтева тачно поклапање за врло дуге називе\n"
+" -I,--ignore-case поклапа називе процеÑа без обзира на величину Ñлова\n"
+" -g,--process-group убија групу процеÑа умеÑто процеÑа\n"
+" -y,--younger-than убија процеÑе који Ñу млађи од ВРЕМЕÐÐ\n"
+" -o,--older-than убија процеÑе који Ñу Ñтарији од ВРЕМЕÐÐ\n"
+" -i,--interactive тражи потврду пре убијања\n"
+" -l,--list иÑпиÑује Ñве познате називе Ñигнала\n"
+" -q,--quiet не иÑпиÑује замерке\n"
+" -r,--regexp тумачи ÐÐЗИВ као проширени регуларни израз\n"
+" -s,--signal СИГÐÐЛ шаље овај Ñигнал умеÑто СИГТЕРМ\n"
+" -u,--user КОРИСÐИК убија Ñамо процеÑ(е) радећи као КОРИСÐИК\n"
+" -v,--verbose извештава ако је Ñигнал уÑпешно поÑлат\n"
+" -V,--version приказује обавештење о издању\n"
+" -w,--wait чека док Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ умре\n"
+" -n,--ns ПИБ упоређује процеÑе који припадају иÑтим проÑторима\n"
+" назива као ПИБ\n"
+"\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context РЕГИЗР убија Ñамо процеÑ(е) који има(ју) контекÑÑ‚\n"
+" (мора да претходи другим аргументима)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "ÐеиÑправни облик времена"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Ðе могу да пронађем кориÑника %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "ÐеиÑпрван ПИБ назива проÑтора"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Лош регуларни израз: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "убијÑве: Ðајвећи број назива је %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "убијÑве: %s нема уноÑе процеÑа (није прикачено ?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Грешка приликом прикачињања пибу %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (ПСмиÑц) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"ÐуторÑка права © 2007 Трент Вадингтон\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Употреба: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <пиб> [<фд> ..]\n"
+" -8, --eight-bit-clean иÑпиÑује чиÑте токове од 8 бита.\n"
+" -n, --no-headers не приказује читај/пиши из фд заглавља.\n"
+" -c, --follow такође оÑматра Ñве нове подређене процеÑе.\n"
+" -t, --tgid иÑкаче на Ñвим нитима где Ñе тгиб "
+"изједначава Ñа <пиб>-ом.\n"
+" -d, --duplicates-removed уклања двоÑтруке читај/упиши из излаза.\n"
+" -V, --version иÑпиÑује податке о издању.\n"
+" -h, --help иÑпиÑује ову помоћ.\n"
+"\n"
+" ПритиÑните КТРЛ-Ц да зауÑтавите излаз.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Употреба: prtstat [опција] ПИБ ...\n"
+" prtstat -V\n"
+"ИÑпиÑује податке о процеÑу\n"
+" -r,--raw Сиров приказ података\n"
+" -V,--version Приказује податке о издању и излази\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (ПСмиÑц) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2022 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"ÐуторÑка права © 2009–2022 Крег Смол\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "покренут"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "уÑпаван"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "диÑк‑Ñпава"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "зомби"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "оцртан"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "оÑтраничен"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "непознато"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"ПроцеÑ: %-14s\t\tСтање: %c (%s)\n"
+"ПроцеÑор#: %-3d\t\tТТУ: %s\tÐити: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"ПроцеÑ, Група и ИБ-ови СеÑије\n"
+" ИБ процеÑа: %d\t\t ИБ родитеља: %d\n"
+" ИБ групе: %d\t\t ИБ ÑеÑије: %d\n"
+" ИБ Т групе: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"ÐеуÑпеÑи Ñтранице\n"
+" Овај Ð¿Ñ€Ð¾Ñ†ÐµÑ (најмањи највећи): %8lu %8lu\n"
+" Подређени процеÑи (најмањи највећи): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Времена процеÑора\n"
+" Овај Ð¿Ñ€Ð¾Ñ†ÐµÑ (блкио гоÑÑ‚ кориÑничког ÑиÑтема): %6.2f %6.2f %6.2f "
+"%6.2f\n"
+" Подређени процеÑи (гоÑÑ‚ кориÑничког ÑиÑтема): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Меморија\n"
+" Ввеличина: %-10s\n"
+" РСС: %-10s \t\t РСС ограничење: %s\n"
+" Почетак кода: %#-10lx\t\t Крај кода: %#-10lx\n"
+" Почетак Ñтека: %#-10lx\n"
+" Указивач Ñтека (ЕСП): %#10lx\t Указивач уметања (ЕИП): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Планирање\n"
+" Политика: %s\n"
+" Фино: %ld \t\t РТ приоритет: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "Ðије уÑпело „asprintf“ у „print_stat“.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "ÐŸÑ€Ð¾Ñ†ÐµÑ Ñа пибом %d не поÑтоји.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Ðе могу да отворим датотеку ÑтатиÑтике за пиб %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Ðе могу да доделим меморију за „proc_info“\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Ðе могу да прегледам датотеку Ñа подацима"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "ÐеиÑправна опција"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Морате да обезбедите барем један ПИБ."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"„/proc“ није прикачен, не могу да добавим Ñтање за „/proc/self/stat“.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s је празно (није прикачено ?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Употреба: pstree [-acglpsStTuZ] [ -h | -H ПИБ ] [ -n | -N врÑта ]\n"
+" [ -A | -G | -U ] [ ПИБ | КОРИСÐИК ]\n"
+" или: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Приказује Ñтабло процеÑа.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments приказује аргументе линије наредби\n"
+" -A, --ascii кориÑти ÐСКРИ знакове иÑцртавања линије\n"
+" -c, --compact-not не Ñажима иÑта подÑтабла\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=ВРСТРбоји Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ñ€ÐµÐ¼Ð° атрибуту\n"
+" (год.)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids приказује иб-ове групе процеÑа; подразумева „-c“\n"
+" -G, --vt100 кориÑти „VT100“ знакове иÑцртавања линије\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all иÑтиче текући Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ његове претке\n"
+" -H ПИБ, --highlight-pid=ПИБ\n"
+" иÑтиче тај Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ његове претке\n"
+" -l, --long не крати дуге редове\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort ређа излаз по ПИБ-у\n"
+" -N ВРСТÐ, --ns-sort=ВРСТÐ\n"
+" ређа излаз према овој врÑти назива\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids приказује ПИБ-ове; подразумева „-c“\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents приказује родитеље изабраног процеÑа\n"
+" -S, --ns-changes приказује прелазе назива\n"
+" -t, --thread-names приказује целе називе нити\n"
+" -T, --hide-threads Ñкрива нити, приказује Ñамо процеÑе\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes приказује прелазе уиб-а\n"
+" -U, --unicode кориÑти „UTF-8“ (Јуникодне) знакове иÑцртавања линије\n"
+" -V, --version приказује податке о издању\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" приказује безбедноÑнe атрибуте\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" ПИБ почиње Ñа овим ПИБ-ом; оÑновни је 1 (init)\n"
+" КОРИСÐИК приказује Ñамо Ñтабла укорењена у процеÑима овог кориÑника\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (ПСмиÑц) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "ТЕРМ није подешен\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Ðе могу да добавим могућноÑти терминала\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "Ð¿Ñ€Ð¾Ñ†Ñ„Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° за %s проÑтор назива није доÑтупна\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Ðема таквог кориÑничког имена: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "ÐиÑам нашао Ð¿Ñ€Ð¾Ñ†ÐµÑ %d.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "ÐиÑам пронашао процеÑе.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "ПритиÑните „унеÑи“ да затворите\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: непознат Ñигнал; %s -l иÑпиÑује Ñигнале.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ÐуторÑка права © 1993-2021 Вернер ÐлмеÑбергер и Крег Смол\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Употреба: killall [ -Z КОÐТЕКСТ ] [ -u КОРИСÐИК ] [ -y ВРЕМЕ ] [ -o "
+#~ "ВРЕМЕ ] [ -eIgiqrvw ]\n"
+#~ " [ -s СИГÐÐЛ | -SIGNAL ] ÐÐЗИВ...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Употреба: pstree [-acglpsStTu] [ -h | -H ПИБ ] [ -n | -N врÑта ]\n"
+#~ " [ -A | -G | -U ] [ ПИБ | КОРИСÐИК ]\n"
+#~ " или: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ÐуторÑка права © 1993-2019 Вернер ÐлмеÑбергер и Крег Смол\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ÐуторÑка права © 1993-2014 Вернер ÐлмеÑбергер и Крег Смол\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (ipc, mnt, net, pid, user, "
+#~ "uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Употреба: pstree [-acglpsStuZ] [ -h | -H ПИД ] [ -n | -N врÑта ]\n"
+#~ "Употреба: pstree [-acglpsStu] [ -h | -H ПИД ] [ -n | -N врÑта ]\n"
+#~ " pstree -V\n"
+#~ "Приказује Ñтабло процеÑа.\n"
+#~ "\n"
+#~ " -a, --arguments приказује аргументе линије наредби\n"
+#~ " -A, --ascii кориÑти знаке за иÑцртавање ÐСКРИ реда\n"
+#~ " -c, --compact не Ñабија иÑтоветна подÑтабла\n"
+#~ " -h, --highlight-all иÑтиче текући Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ његовог претходника\n"
+#~ " -H ПИД,\n"
+#~ " --highlight-pid=ПИД иÑтиче овај Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸ његовог претходника\n"
+#~ " -g, --show-pgids приказује ибове процеÑне групе; подразумева „-c“\n"
+#~ " -G, --vt100 кориÑти знаке за иÑцртавање ВТ100 реда\n"
+#~ " -l, --long не крати дуге редове\n"
+#~ " -n, --numeric-sort ређа излаз према ПИБ-у\n"
+#~ " -N врÑта,\n"
+#~ " --ns-sort=врÑта ређа према врÑти називног проÑтора (ipc, mnt, net, "
+#~ "pid, user, uts)\n"
+#~ " -p, --show-pids приказује ПИБ-ове; подразумева -c\n"
+#~ " -s, --show-parents приакзује родитеље изабраног процеÑа\n"
+#~ " -S, --ns-changes приказује преводе називног проÑтора\n"
+#~ " -t, --thread-names приказује пуне називе нити\n"
+#~ " -T, --hide-threads Ñкрива нити, приказује Ñамо процеÑе\n"
+#~ " -u, --uid-changes приказује прелазе уиба\n"
+#~ " -U, --unicode кориÑти знакове за иÑцртавање УТФ-8 (Уникод) реда\n"
+#~ " -V, --version приказује податке о издању\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ÐуторÑка права (C) 1993-2012 Вернер ÐлмеÑбергер и Крег Смол\n"
+#~ "\n"
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644
index 0000000..16f08b4
--- /dev/null
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..4776488
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,898 @@
+# Swedish language file for psmisc.
+# Copyright © 2003, 2006, 2007, 2009, 2016, 2018, 2019, 2020, 2022 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Joakim Mared <joakim at bfcom dot se>, 2003.
+# Daniel Nylander <po@danielnylander.se>, 2006, 2007, 2009.
+# Sebastian Rasmussen <sebras@gmail.com>, 2016, 2018, 2019, 2020, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.6-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2022-12-08 16:09+0100\n"
+"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Användning: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n RYMD]\n"
+" [-k [-i] [-SIGNAL]] NAMN…\n"
+" fuser -l\n"
+" fuser -V\n"
+"Visa vilka processer som använder namngivna filer, uttag eller filsystem.\n"
+"\n"
+" -a,--all visa även filer som inte används\n"
+" -i,--interactive fråga innan processen dödas (ignoreras utan -k)\n"
+" -I,--inode använd alltid inoder för att jämföra filer\n"
+" -k,--kill döda processer som använder namngiven fil\n"
+" -l,--list-signals lista tillgängliga signalnamn\n"
+" -m,--mount visa alla processer som använder namngivna filsystem "
+"eller blockenheter\n"
+" -M,--ismountpoint genomför begäran endast om NAMN är en "
+"monteringspunkt\n"
+" -n,--namespace RYMD sök i denna namnrymd (fil, udp, tcp)\n"
+" -s,--silent tyst körning\n"
+" -SIGNAL skicka denna signal istället för SIGKILL\n"
+" -u,--user visa användar-ID\n"
+" -v,--verbose informativ utskrift\n"
+" -w,--writeonly döda bara processer med skrivrättighet\n"
+" -V,--version visa versionsinformation\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 sök endast bland IPv4-uttag (socket)\n"
+" -6,--ipv6 sök endast bland IPv6-uttag (socket)\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" udp/tcp-namn: [lokal_port][,[fjärrvärd][,[fjärrport]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 1993-2022 Werner Almesberger och Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc kommer med ABSOLUT INGEN GARANTI.\n"
+"Detta är fri programvara och du är välkommen att distribuera den under\n"
+"villkoren för GNU General Public License.\n"
+"För mer information om dessa villkor, se filerna kallade COPYING.\n"
+"Följande text är en informell översättning som enbart tillhandahålls\n"
+"i informativt syfte. För alla juridiska tolkningar gäller den engelska "
+"originaltexten.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Kan inte öppna katalogen /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Kan inte allokera minne för matchande proc: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Angivna filnamnet %s finns inte.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Kan inte ta status på %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Kan inte slå upp lokal port %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Okänd AF %d för lokal port\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Kan inte öppna protokollfilen \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Angivet filnamn %s är inte en monteringspunkt.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Ogiltig flagga %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Flagga för namnrymd kräver ett argument."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Ogiltigt namn för namnrymd"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Du kan endast använda filer med monteringspunktsflaggor"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Ingen processpecifikation angiven"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "flagga för alla, -m, kan inte användas med flaggan för tyst, -s."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Du kan inte söka efter endast IPv4- och endast IPv6-uttag samtidigt"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s ANVÄNDARE PID ÅTKOMS KOMMANDO\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(okänd)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Kan inte ta status på fil %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Kan inte öppna /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Döda process %d ? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Kunde inte döda process %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Kan inte öppna ett nätverksuttag.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Kan inte hitta uttagets enhetsnummer.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Döda %s(%s%d) ? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Signalera %s(%s%d) ? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Kan inte hämta UID från processtatus\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Felaktigt reguljärt uttryck: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: hoppar över partiell matchning %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Dödade %s(%s%d) med signal %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: ingen process hittades\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Användning: killall [FLAGGA]… [--] NAMN…\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact kräver exakt matchning för väldigt långa namn\n"
+" -I,--ignore-case ingen skillnad på gemener/versaler vid namnmatchning\n"
+" -g,--process-group döda processgrupp istället för process\n"
+" -y,--younger-than döda processer yngre än TID\n"
+" -o,--older-than döda processer äldre än TID\n"
+" -i,--interactive fråga efter bekräftelse före dödandet\n"
+" -l,--list lista alla kända signalnamn\n"
+" -q,--quiet skriv inte ut klagomål\n"
+" -r,--regexp tolka NAMN som ett utökat reguljärt uttryck\n"
+" -s,--signal SIGNAL skicka signal istället för SIGTERM\n"
+" -u,--user ANVÄNDARE döda endast process(er) som körs som ANVÄNDARE\n"
+" -v,--verbose rapportera om signalen blev skickad korrekt\n"
+" -V,--version visa versionsinformation\n"
+" -w,--wait vänta tills processerna är döda\n"
+" -n,--ns PID matcha processer som tillhöl samma namnrymd\n"
+" som PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP döda endast process(er) som har kontext\n"
+" (måste föregå andra argument)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Ogiltigt tidsformat"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Kan inte hitta användare %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Ogiltig PID för namnrymd"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Felaktigt reguljärt uttryck: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Maximalt antal namn är %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s saknar processposter (inte monterad?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Fel vid koppling till pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright © 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Användning: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean skriv ut 8-bitars rena strömmar.\n"
+" -n, --no-headers visa inte läs/skriv från fd-huvuden.\n"
+" -c, --follow titta även på alla nya barnprocesser.\n"
+" -t, --tgid titta på alla trådar där tgid är lika med "
+"<pid>.\n"
+" -d, --duplicates-removed Ta bort dubbletter av läs/skriv från "
+"utdata.\n"
+" -V, --version visar versionsinformation.\n"
+" -h, --help visar den här hjälpen.\n"
+"\n"
+" Tryck CTRL-C för att avsluta utdata.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Användning: prtstat [flaggor] PID …\n"
+" prtstat -V\n"
+"Skriv ut information om en process\n"
+" -r,--raw RÃ¥ visning av information\n"
+" -V,--version Visa versionsinformation och avsluta\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2022 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 2009-2022 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "kör"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "sover"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "disk sover"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "zombie"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "spårad"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "sidväxling"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "okänd"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Process: %-14s\t\tTillstånd: %c (%s)\n"
+" Proc.: %-3d\t\tTTY: %s\tTrådar: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Process-, Grupp- och Sessions-ID\n"
+" Process-ID: %d\t\t Överordnat ID: %d\n"
+" Group-ID: %d\t\t Sessions-ID: %d\n"
+" T Group-ID: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Sidfel\n"
+" Denna Process (lägre övre): %8lu %8lu\n"
+" Barnprocesser (lägre övre): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU-tider\n"
+" Denna process (användare system gäst blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Barnprocesser (användare system gäst): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Minne\n"
+" V-storlek: %-10s\n"
+" RSS: %-10s \t\t RSS-begränsning: %s\n"
+" Kodstart: %#-10lx\t\t Kodslut: %#-10lx\n"
+" Stackstart: %#-10lx\n"
+" Stackpekare (ESP): %#10lx\t Instr.-pekare (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Schemaläggning\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT-prioritet: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf i print_stat misslyckades.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "NÃ¥gon process med pid %d finns inte.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Kan inte öppna stat-fil för pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr ""
+"Kan inte allokera minne för proc_info\n"
+"\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Kan inte genomsöka stat-fil"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Ogiltig flagga"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Du måste tillhandahålla minst en PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc är inte monterad, kan inte ta status på /proc/self/stat.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s är tom (inte monterad?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Användning: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N typ ]\n"
+" [ -A | -G | -U ] [ PID | ANVÄNDARE ]\n"
+" eller: pstree -V\n"
+"\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Visa ett träd av processer.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments visa kommandoradsargument\n"
+" -A, --ascii använd ASCII-linjeritningstecken\n"
+" -c, --compact-not komprimera inte identiska underträd\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=TYP färglägg process efter attribut\n"
+" (Ã¥lder)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids visa processgrupps-ID:n; medför -c\n"
+" -G, --vt100 använd VT100-linjeritningstecken\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all markera aktuell process och dess förfäder\n"
+" -H PID, --highlight-pid=PID\n"
+" markera denna process och dess förfäder\n"
+" -l, --long korta inte ner långa rader\n"
+"\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort sortera utdata efter PID\n"
+" -N TYP, --ns-sort=TYP\n"
+" sortera utdata efter namnrymd\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids visa PID:ar; medför -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents visa överordnade processer för vald process\n"
+" -S, --ns-changes visa namnrymdsövergångar\n"
+" -t, --thread-names visa fullständiga trådnamn\n"
+" -T, --hide-threads göm trådar, visa endast processer\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes visa uid-övergångar\n"
+" -U, --unicode använd UTF-8-linjeritningstecken (Unicode)\n"
+" -V, --version visa versionsinformation\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" visa säkerhetsattribut\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID starta vid denna PID; standardvärde är 1 (init)\n"
+" ANVÄNDARE visa endast träd med denna användares\n"
+" processer som rot\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM är inte inställd\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Kan inte ta reda på terminalens förmågor\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "procfs-fil för %s-namnrymd inte tillgänglig\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Ingen sådan användare: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Process %d hittades inte.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Inga processer hittades.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Tryck Retur för att stänga\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: okänd signal; %s -l listar signaler.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2021 Werner Almesberger och Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Användning: killall [-Z KONTEXT] [-u ANVÄNDARE] [-y TID] [ -o TID ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAMN...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "Användning: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N typ ]\n"
+#~ " [ -A | -G | -U ] [ PID | ANVÄNDARE ]\n"
+#~ " eller: pstree -V\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2019 Werner Almesberger och Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Användning: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N typ ]\n"
+#~ "Användning: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N typ ]\n"
+#~ " [ -A | -G | -U ] [ PID | ANVÄNDARE ]\n"
+#~ " pstree -V\n"
+#~ "Visa ett träd av processer.\n"
+#~ "\n"
+#~ " -a, --arguments visa kommandoradsargument\n"
+#~ " -A, --ascii använd ASCII-linjeritningstecken\n"
+#~ " -c, --compact komprimera inte identiska underträd\n"
+#~ " -h, --highlight-all markera aktuell process och dess förfäder\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID markera denna process och dess förfäder\n"
+#~ " -g, --show-pgids visa processgrupp ID:n; medför -c\n"
+#~ " -G, --vt100 använd VT100-linjeritningstecken\n"
+#~ " -l, --long korta inte ner långa rader\n"
+#~ " -n, --numeric-sort sortera utdata efter PID\n"
+#~ " -N typ,\n"
+#~ " --ns-sort=typ sortera utdata efter namnrymd (cgroup, ipc, mnt, "
+#~ "net,\n"
+#~ " pid, user, uts)\n"
+#~ " -p, --show-pids visa PID:ar; medför -c\n"
+#~ " -s, --show-parents visa överordnade processer för vald process\n"
+#~ " -S, --ns-changes visa namnrymdsövergångar\n"
+#~ " -t, --thread-names visa fullständiga trådnamn\n"
+#~ " -T, --hide-threads göm trådar, visa endast processer\n"
+#~ " -u, --uid-changes visa uid-övergångar\n"
+#~ " -U, --unicode använd UTF-8-linjeritningstecken (Unicode)\n"
+#~ " -V, --version visa versionsinformation\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2014 Werner Almesberger och Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2009 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2009 Werner Almesberger och Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: pidof [-eg] NAMN...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e kräv exakt matchning för långa namn;\n"
+#~ " hoppa över om kommandoraden är otillgänglig\n"
+#~ " -g visa processgruppens ID istället för processens ID\n"
+#~ " -V visa versionsinformation\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2005 Werner Almesberger och Craig Small\n"
+#~ "\n"
+
+#~ msgid "You cannot use the mounted and mountpoint flags together"
+#~ msgstr ""
+#~ "Du kan inte använda monterade och monteringspunktflaggorna samtidigt"
+
+#~ msgid "Cannot stat mount point %s: %s\n"
+#~ msgstr "Kan inte ta status på monteringspunkten %s: %s\n"
+
+#~ msgid "Cannot open /etc/mtab: %s\n"
+#~ msgstr "Kan inte öppna /etc/mtab: %s\n"
+
+#~ msgid "Internal error: MAX_DEPTH not big enough.\n"
+#~ msgstr "Internt fel: MAX_DEPTH är inte tillräckligt stor.\n"
+
+#~ msgid "Cannot open protocol file \"%s\": %s"
+#~ msgstr "Kan inte öppna protokollfil \"%s\": %s"
diff --git a/po/uk.gmo b/po/uk.gmo
new file mode 100644
index 0000000..444bdee
--- /dev/null
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..00712ee
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,880 @@
+# Ukrainian translation for psmisc.
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Yuri Chornoivan <yurchor@ukr.net>, 2011-2022, 2024.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc-23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-13 17:53+0200\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 23.04.1\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"КориÑтуваннÑ: fuser [-fMuv] [-a|-s] [-4|-6] [-c|-m|-n ПРОСТІР]\n"
+" [-k [-i] [-СИГÐÐЛ]] ÐÐЗВÐ...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Показує, Ñкі процеÑи кориÑтуютьÑÑ Ð²ÐºÐ°Ð·Ð°Ð½Ð¸Ð¼Ð¸ файлами, Ñокетами або файловими "
+"ÑиÑтемами.\n"
+"\n"
+" -a,--all показувати також невикориÑтані файли\n"
+" -i,--interactive запитувати перед завершеннÑм роботи процеÑу "
+"(ігноруєтьÑÑ Ð±ÐµÐ· -k)\n"
+" -k,--kill завершити роботу процеÑів, Ñкі кориÑтуютьÑÑ "
+"вказаним файлом\n"
+" -l,--list-signals показати ÑпиÑок доÑтупних назв Ñигналів\n"
+" -m,--mount показати вÑÑ– процеÑи, що викориÑтовують вказані "
+"файлові ÑиÑтеми\n"
+" або блоковий приÑтрій\n"
+" -M,--ismountpoint виконати запит, лише Ñкщо ÐÐЗВРє точкою "
+"монтуваннÑ\n"
+" -n,--namespace ПРОСТІР шукати лише у вказаному проÑторі назв (file, udp "
+"або tcp)\n"
+" -s,--silent не виводити повідомлень\n"
+" -СИГÐÐЛ надіÑлати вказаний Ñигнал заміÑÑ‚ÑŒ SIGKILL\n"
+" -u,--user показувати ідентифікатори кориÑтувачів\n"
+" -v,--verbose виводити дані докладно\n"
+" -w,--writeonly завершити роботу лише процеÑів з доÑтупом на запиÑ\n"
+" -V,--version показати дані щодо верÑÑ–Ñ—\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 шукати лише Ñеред Ñокетів IPv4\n"
+" -6,--ipv6 шукати лише Ñеред Ñокетів IPv6\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" назви udp/tcp: [локлаьний_порт][,[вузол_rmt][,[порт_rmt]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"© Werner Almesberger та Craig Small, 1993–2024\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"Щодо PSmisc вам ÐЕ ÐÐДÐЄТЬСЯ ЖОДÐИХ ГÐРÐÐТІЙ.\n"
+"Це вільне програмне забезпеченнÑ, ми будемо раді, Ñкщо ви поширюватимете\n"
+"його відповідно до умов Загальної громадÑької ліцензії GNU (GPL).\n"
+"Щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про це, ознайомтеÑÑ Ð· файлом з назвою COPYING.\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ каталог /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ процеÑу: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Файл з вказаною назвою, %s, не Ñ–Ñнує.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані за допомогою stat %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ локальний порт %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Ðевідомий локальний порт AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл протоколу «%s»: %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Вказана назва файла, %s, не Ñ” точкою монтуваннÑ.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: некоректний параметр, %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Параметр проÑтору назв Ñлід вказувати з аргументом."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Ðекоректна назва проÑтору назв"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Файли можна викориÑтовувати лише разом з параметрами точки монтуваннÑ"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Ðе вказано Ñпецифікації процеÑу"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "параметр «all» не можна викориÑтовувати разом з параметром «silent»."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr ""
+"ОдночаÑно можна виконувати пошук лише Ð´Ð»Ñ Ñокетів IPv4 або Ñокетів IPv6"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s КОРИСТУВÐЧ PID ДОСТУП КОМÐÐДÐ\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(невідомий)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ файл за допомогою stat %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Завершити Ð¿Ñ€Ð¾Ñ†ÐµÑ %d? (y (так) або N (ні)) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸ роботу процеÑу %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ñокет мережі.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ номер приÑтрою Ñокета.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Завершити роботу %s(%s%d)? (y (так) або N (ні)) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "ÐадіÑлати Ñигнал %s(%s%d)? (y (так) або N (ні)) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ UID з даних щодо Ñтану процеÑу\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: помилковий формальний вираз: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: пропуÑкаємо чаÑтковий відповідник %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Завершено роботу %s(%s%d) за допомогою Ñигналу %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ знайдено\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "ВикориÑтаннÑ: killall [ПÐРÐМЕТР]... [--] ÐÐЗВÐ...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact вимагати повної відповідноÑÑ‚Ñ– Ð´Ð»Ñ Ð´ÑƒÐ¶Ðµ довгих назв\n"
+" -I,--ignore-case вÑтановлювати відповідніÑÑ‚ÑŒ без Ð²Ñ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру "
+"Ñимволів\n"
+" -g,--process-group завершити роботу групи процеÑів, а не окремого "
+"процеÑу\n"
+" -y,--younger-than завершити роботу процеÑів, чий вік не перевищує "
+"вказаного чаÑу\n"
+" -o,--older-than завершити роботу процеÑів, чий вік перевищує вказаний "
+"чаÑ\n"
+" -i,--interactive проÑити Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸\n"
+" -l,--list показати ÑпиÑок вÑÑ–Ñ… відомих назв Ñигналів\n"
+" -q,--quiet не виводити повідомлень\n"
+" -r,--regexp вважати параметр ÐÐЗВРформальним виразом\n"
+" -s,--signal СИГÐÐЛ надіÑлати вказаний Ñигнал заміÑÑ‚ÑŒ SIGTERM\n"
+" -u,--user КОРИСТУВÐЧ завершити роботу лише процеÑів КОРИСТУВÐЧа\n"
+" -v,--verbose повідомлÑти про уÑпішне надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñигналу\n"
+" -V,--version показати дані щодо верÑÑ–Ñ—\n"
+" -w,--wait чекати на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑів\n"
+" -n,--ns PID знайти процеÑи, Ñкі належать до тих Ñамих проÑторів "
+"назв,\n"
+" що і PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP завершити роботу лише процеÑів з відповідним "
+"контекÑтом\n"
+" (Ñлід вказувати перед іншими аргументами)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Ðекоректний формат Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ кориÑтувача %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "Ðекоректний PID проÑтору назв"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Помилковий формальний вираз: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: макÑимальною кількіÑÑ‚ÑŽ назв Ñ” %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s не міÑтить запиÑів процеÑів (не змонтовано?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби приєднатиÑÑ Ð´Ð¾ pid %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"© Trent Waddington, 2007\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"ВикориÑтаннÑ: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean виводити 8-бітові очищені потоки даних.\n"
+" -n, --no-headers мне показувати читаннÑ/Ð·Ð°Ð¿Ð¸Ñ Ð· заголовків деÑкрипторів "
+"файлів.\n"
+" -c, --follow зондувати будь-Ñкі нові дочірні процеÑи.\n"
+" -t, --tgid вибрати уÑÑ– потоки обробки, де tgid дорівнює <pid>.\n"
+"\n"
+" -d, --duplicates-removed вилучити дублікати запиÑів читаннÑ/запиÑу з "
+"виведених даних.\n"
+" -V, --version вивеÑти дані щодо верÑÑ–Ñ—.\n"
+" -h, --help вивеÑти ці довідкові дані.\n"
+"\n"
+" ÐатиÑніть Ctrl-C, щоб перервати Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ….\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"ВикориÑтаннÑ: prtstat [параметри] PID ...\n"
+" prtstat -V\n"
+"ВивеÑти дані що вказаного процеÑу\n"
+" -r,--raw показати дані без обробки\n"
+" -V,--version показати дані щодо верÑÑ–Ñ— Ñ– завершити роботу\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"© Craig Small, 2009–2024\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "працює"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "Ñпить"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "Ñпить на диÑку"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "зомбі"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "траÑуваннÑ"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "гортаннÑ"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "невідомий"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"ПроцеÑ: %-14s\t\tСтан: %c (%s)\n"
+" Проц.: %-3d\t\tTTY: %s\tПотоки: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Ідентифікатори процеÑу, групи Ñ– ÑеанÑу\n"
+" Ід. процеÑу: %d\t\t Ід. батьків.: %d\n"
+" Ід. групи: %d\t\t Ід. ÑеанÑу: %d\n"
+" T Ід. групи: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Промахи за Ñторінками\n"
+" Цей Ð¿Ñ€Ð¾Ñ†ÐµÑ (мін. макÑ.): %8lu %8lu\n"
+" Доч. процеÑи (мін. макÑ.): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Цикли процеÑора\n"
+" Цей Ð¿Ñ€Ð¾Ñ†ÐµÑ (кориÑтувач ÑиÑтема гіÑÑ‚ÑŒ blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ (кориÑтувач ÑиÑтема гіÑÑ‚ÑŒ): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Пам’ÑÑ‚ÑŒ\n"
+" Вірт. розмір: %-10s\n"
+" RSS: %-10s \t\t ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ RSS: %s\n"
+" Поч. коду: %#-10lx\t\t Кінець коду: %#-10lx\n"
+" Поч. Ñтека: %#-10lx\n"
+" Вказівник Ñтека (ESP): %#10lx\t Вказівник команди (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"ПлануваннÑ\n"
+" Правила: %s\n"
+" ПоÑтупливіÑÑ‚ÑŒ: %ld \t\t Пріоритет РЧ: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "Помилка asprintf у print_stat.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "ПроцеÑу з pid %d не Ñ–Ñнує.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл stat Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑу з pid %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° ÑтатиÑтичних даних"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Ðекоректний параметр"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Вам Ñлід вказати принаймні одне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ PID."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc не змонтовано, Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ /proc/self/stat неможливе.\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s є порожнім (не змонтовано?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"КориÑтуваннÑ: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N тип ]\n"
+" [ -A | -G | -U ] [ PID | КОРИСТУВÐЧ ]\n"
+" або: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Показати ієрархію процеÑів.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments показати аргументи командного Ñ€Ñдка\n"
+" -A, --ascii викориÑтати Ñимволи Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ ASCII\n"
+" -c, --compact-not не ÑтиÑкати ідентичні підлеглі ієрархії\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=ТИП розфарбувати процеÑи за атрибутом\n"
+" (вік)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids показати ідентифікатори груп процеÑів; неÑвно "
+"викориÑтовує -c\n"
+" -G, --vt100 ÑкориÑтатиÑÑ Ñимволами Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ VT100\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all підÑвітити поточний Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ– його попередники\n"
+" -H PID, --highlight-pid=PID\n"
+" підÑвітити вказаний Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ‚Ð° його попередники\n"
+" -l, --long не обрізати довгі Ñ€Ñдки\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort упорÑдкувати виведені дані за PID\n"
+" -N TYPE, --ns-sort=ТИП\n"
+" упорÑдкувати виведені дані за цим типом проÑтору назв\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids показати PID; неÑвно викориÑтовує -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents показати батьківÑькі процеÑи вибраного процеÑу\n"
+" -S, --ns-changes показати переходи проÑторів назв\n"
+" -t, --thread-names показати назви потоків Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ð½Ñ–ÑÑ‚ÑŽ\n"
+" -T, --hide-threads приховати потоки виконаннÑ, показати лише процеÑи\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes показати переходи uid\n"
+" -U, --unicode викориÑтовувати Ñимволи Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ UTF-8 "
+"(Unicode)\n"
+" -V, --version вивеÑти дані щодо верÑÑ–Ñ—\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" вивеÑти атрибути захиÑту\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID розпочати з вказаного PID; типовим початковим значеннÑм Ñ” 1 "
+"(init)\n"
+" КОРИСТУВÐЧ показати лише ієрархії з кореневими процеÑами цього "
+"кориÑтувача\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "Ðе вÑтановлено змінної TERM\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані щодо можливоÑтей термінала\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "файл procfs Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñтору назв %s недоÑтупний\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "КориÑтувача з таким іменем не Ñ–Ñнує: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "ÐŸÑ€Ð¾Ñ†ÐµÑ %d не знайдено.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Ðе знайдено жодного процеÑу.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "ÐатиÑніть Enter, щоб закрити.\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr ""
+"%s: невідомий Ñигнал; щоб отримати ÑпиÑок Ñигналів віддайте команду %s -l .\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "© Werner Almesberger та Craig Small, 1993–2021\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "ВикориÑтаннÑ: killall [-Z КОÐТЕКСТ] [-u КОРИСТУВÐЧ] [ -y ЧÐС ] [ -o ЧÐС ] "
+#~ "[ -eIgiqrvw ]\n"
+#~ " [ -s СИГÐÐЛ | -СИГÐÐЛ ] ÐÐЗВÐ...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "КориÑтуваннÑ: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N тип ]\n"
+#~ " [ -A | -G | -U ] [ PID | КОРИСТУВÐЧ ]\n"
+#~ " або: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "© Werner Almesberger та Craig Small, 1993–2019\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "КориÑтуваннÑ: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N тип ]\n"
+#~ "КориÑтуваннÑ: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N тип ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Показати ієрархію процеÑів.\n"
+#~ "\n"
+#~ " -a, --arguments показати аргументи командного Ñ€Ñдка\n"
+#~ " -A, --ascii викориÑтовувати Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ Ñимволи ASCII\n"
+#~ " -c, --compact не ущільнювати ідентичні гілки ієрархії\n"
+#~ " -h, --highlight-all позначити поточний Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ‚Ð° його дочірні процеÑи\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID позначити вказаний Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ‚Ð° його дочірні процеÑи\n"
+#~ " -g, --show-pgids показати ідентифікатори груп процеÑів; додаєтьÑÑ -"
+#~ "c\n"
+#~ " -G, --vt100 викориÑтовувати Ñимволи Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ VT100\n"
+#~ " -l, --long не обрізати довгі Ñ€Ñдки\n"
+#~ " -n, --numeric-sort впорÑдкувати дані за PID\n"
+#~ " -N тип,\n"
+#~ " --ns-sort=тип впорÑдкувати за типами проÑторів назв (cgroup, ipc, "
+#~ "mnt,\n"
+#~ " net, pid, user, "
+#~ "uts)\n"
+#~ " -p, --show-pids показати PID; додаєтьÑÑ -c\n"
+#~ " -s, --show-parents показати оÑновні процеÑи вибраного процеÑу\n"
+#~ " -S, --ns-changes показати переходи проÑторів назв\n"
+#~ " -t, --thread-names показати назви потоків повніÑÑ‚ÑŽ\n"
+#~ " -T, --hide-threads приховати потоки, показати лише процеÑи\n"
+#~ " -u, --uid-changes показати переходи uid\n"
+#~ " -U, --unicode викориÑтовувати Ñимволи Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ð¹ UTF-8 "
+#~ "(Unicode)\n"
+#~ " -V, --version показати дані щодо верÑÑ–Ñ— програми\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "© Werner Almesberger та Craig Small, 1993–2014\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2012 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "© Werner Almesberger та Craig Small, 1993–2012\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ВикориÑтаннÑ: pidof [ -eg ] ÐÐЗВÐ...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e вимагати повної відповідноÑÑ‚Ñ– Ð´Ð»Ñ Ð´ÑƒÐ¶Ðµ довгих назв;\n"
+#~ " пропуÑтити, Ñкщо не вдаєтьÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ñдок команди\n"
+#~ " -g показувати ідентифікатор групи процеÑу заміÑÑ‚ÑŒ ідентифікатора "
+#~ "процеÑу\n"
+#~ " -V показати дані щодо верÑÑ–Ñ—\n"
+#~ "\n"
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644
index 0000000..961ec40
--- /dev/null
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..78c7d7b
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,857 @@
+# Vietnamese translation for PSmisc.
+# Bản dịch tiếng Việt cho PSmisc.
+# Copyright © 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# Clytie Siddall <clytie@riverland.net.au>, 2005, 2006, 2007, 2008, 2009, 2010.
+# Trần Ngá»c Quân <vnwildman@gmail.com>, 2012-2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-17 09:03+0700\n"
+"Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Gtranslator 42.0\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"Cách dùng: fuser [ -fMuvw ] [-a|-s] [-4|-6] [-c|-m|-n KHOẢNG]\n"
+" [-k [-i] [-TÃN_HIỆU]] TÊN…\n"
+" fuser -l\n"
+" fuser -V\n"
+"Hiển thị những tiến trình nào đang dùng những tập tin, ổ cắm hay hệ thống "
+"tập tin có tên đưa ra.\n"
+"\n"
+" -a,--all cũng hiển thị các tập tin không dùng\n"
+" -i,--interactive há»i trÆ°á»›c khi buá»™c kết thúc (bị bá» qua nếu không có "
+"\"-k\")\n"
+" -I,--inode luôn dùng nút để so sánh các tập tin\n"
+" -k,--kill buộc kết thúc mỗi tiến trình đang truy cập đến tập "
+"tin có tên đưa ra\n"
+" -l,--list-signals liệt kê những tên tín hiệu sẵn có\n"
+" -m,--mount hiển thị tất cả các tiến trình đang sử dụng\n"
+" những hệ thống tập tin hay thiết bị khối\n"
+" -M,--ismountpoint đáp ứng chỉ khi TÊN là một điểm gắn (moutpoint)\n"
+" -n,--namespace KHOẢNG tìm kiếm trong miá»n tên này (file, udp hay tcp)\n"
+" -s,--silent không xuất chi tiết\n"
+" -SIGNAL gửi tín hiệu này thay cho SIGKILL\n"
+" -u,--user hiển thị các mã ngÆ°á»i dùng (UID)\n"
+" -v,--verbose kết xuất chi tiết\n"
+" -w,--writeonly chỉ buá»™c chấm dứt những tiến trình mà có quyá»n ghi\n"
+" -V,--version hiển thị thông tin vỠphiên bản\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 chỉ tìm kiếm ổ cắm kiểu IPv4\n"
+" -6,--ipv6 chỉ tìm kiếm ổ cắm kiểu IPv6\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr " Các tên udp/tcp: [cổng_cục_bộ][,[máy_chủ][,[cổng_máy_chủ]]]\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Tác quyá»n © năm 1993-2024 của Werner Almesberger và Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc KHÔNG BẢO ÄẢM GÃŒ CẢ.\n"
+"Äây là phần má»m tá»± do, và bạn có thể phân phối nó vá»›i Ä‘iá»u kiện của\n"
+"Giấy Phép Công của GNU (GPL).\n"
+"Äể tìm thấy thông tin thêm thì hãy xem tập tin có tên COPYING (Giấy phép)\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "Không thể mở thư mục /proc: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "Không thể cấp phát bộ nhớ cho tiến trình khớp: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "Tên tập tin đã cho %s không tồn tại.\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "Không thể lấy các thông tin vỠ%s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "Không tìm thấy tên cổng cục bộ %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "Không biết cổng cục bộ AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "Không thể mở tập tin giao thức \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "Tên tập tin đã cho %s không phải là một điểm gắn.\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s: Tùy chá»n %s không hợp lệ\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "Tùy chá»n miá»n tên cần đến má»™t đối số."
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "Tên miá»n tên không hợp lệ"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "Bạn có thể sá»­ dụng tập tin chỉ vá»›i tùy chá»n Ä‘iểm_lắp"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "Chưa nhập đặc tả tiến trình"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "tất cả các tùy chá»n không cho phép bạn dùng vá»›i tùy chá»n \"im lặng\"."
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "Không cho phép bạn tìm kiếm ổ cắm kiểu cả IPv4 lẫn IPv6 Ä‘á»u đồng thá»i"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s NGƯỜI_DÙNG PID TRUY_CẬP LỆNH\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(không hiểu)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "Không thể lấy các thông tin vỠtập tin %s: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "Không thể mở thư mục /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "Có buộc kết thúc tiến trình %d không? (y/N) (có/không) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "Không thể buộc kết thúc tiến trình %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "Không thể mở một ổ cắm mạng.\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "Không tìm thấy số hiệu thiết bị ổ cắm.\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "Có buộc kết thúc %s(%s%d) không? (c/K) (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "Tín hiệu %s(%s%d) không? (y/N)(c/K) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: Không thể lấy UID từ trạng thái của tiến trình\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: Biểu thức chính quy sai: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: BỠqua khớp một phần %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "Mới buộc kết thúc %s(%s%d) với tín hiệu %d\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: không tìm thấy tiến trình\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "Cách dùng: killall [ TÙY_CHỌN ]… [--] TÊN…\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+" -e,--exact yêu cầu khá»›p chính xác vá»›i má»i tên rất dài\n"
+" -I,--ignore-case không phân biệt HOA/thÆ°á»ng khi khá»›p tên tiến trình\n"
+" -g,--process-group buộc kết thúc nhóm tiến trình thay thế tiến trình\n"
+" -y,--younger-than buộc kết thúc mỗi tiến trình mới hơn THỜI_GIAN\n"
+" -o,--older-than buộc kết thúc mỗi tiến trình cũ hơn THỜI_GIAN\n"
+" -i,--interactive xin xác nhận trước khi buộc kết thúc\n"
+" -l,--list liệt kê má»i tên tín hiệu đã biết\n"
+" -q,--quiet không hiển thị lá»i than phiá»n (_im_)\n"
+" -r,--regexp giải thích TÊN là biểu thức chính quy mở rộng\n"
+" -s,--signal TÃN_HIỆU gá»­i tín hiệu này thay thế SIGTERM\n"
+" -u,--user NG_DÙNG buộc kết thúc chỉ những tiến trình đang chạy\n"
+" dÆ°á»›i tÆ° cách ngÆ°á»i dùng này\n"
+" -v,--verbose thông báo khi đã gửi tín hiệu thành công\n"
+" -V,--version hiện thông tin phiên bản của chương trình\n"
+" -w,--wait đợi tiến trình kết thúc\n"
+" -n,--ns PID khớp mẫu tiết trình cái mà thuộc vỠcùng một không\n"
+" gian tên với PID\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context BIỂU_THỨC_CHÃNH _QUY chỉ buá»™c kết thúc những tiến trình\n"
+" có ngữ cảnh (phải đi trước các đối số khác)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "Äịnh dạng thá»i gian không hợp lệ"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "Không tìm thấy ngÆ°á»i dùng %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "IID không gian tên không hợp lệ"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "Biểu thức chính quy sai: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: Số lượng tên tối đa là %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s thiếu các mục tuyến trình (đã gắn chưa?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "Gặp lỗi khi đính kèm đến PID %i\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Tác quyá»n © năm 2007 của Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"Cách dùng: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean xuất luồng dữ liệu sạch 8 bít.\n"
+" -n, --no-headers không hiển thị Ä‘á»c/viết từ phần đầu fd.\n"
+" -c, --follow xem bất kỳ tiến trình con mới nào.\n"
+" -t, --tgid xem tất cả các tiến trình chỗ mà tgid bằng "
+"<pid>.\n"
+" -d, --duplicates-removed gỡ bá» Ä‘á»c/viết trùng lặp ra khá»i kết xuất.\n"
+" -V, --version hiển thị thông tin vỠphiên bản.\n"
+" -h, --help hiển thị trợ giúp này.\n"
+"\n"
+" Bấm tổ hợp phím CTRL-C để kết thúc.\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"Cách dùng: prtstat [tùy_chá»n…] PID …\n"
+" prtstat -V\n"
+"(PID là mã số tiến trình)\n"
+"\n"
+"In ra thông tin vỠmột tiến trình nào đó\n"
+" -r,--raw Hiển thị thông tin dạng thô\n"
+" -V,--version Hiển thị thông tin vỠphiên bản rồi thoát\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Tác quyá»n © năm 2009-2024 của Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "đang chạy"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "đang ngủ"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "đĩa ngủ"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "ma"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "được theo dõi"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "đang dàn trang"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "không rõ"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"Tiến trình: %-14s\t\tTình trạng: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tTuyến trình: %ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"Mã số cho tiến trình, nhóm và phiên làm việc\n"
+" Mã số tiến trình: %d\t Mã số cha mẹ: %d\n"
+" Mã số nhóm: %d\tMã số phiên làm việc: %d\n"
+" Mã số nhóm T: %d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"Sai trang\n"
+" Tiến trình này\t(nhỠlớn): %8lu %8lu\n"
+" Tiến trình con\t(nhỠlớn): %8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"Thá»i gian sá»­ dụng CPU\n"
+" Tiến trình này (ngdùng hệ khách khốiVR): %6.2f %6.2f %6.2f %6.2f\n"
+" Tiến trình con (ngdùng hệ khách): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"Bá»™ nhá»›\n"
+" Cỡ ảo: %-10s\n"
+" RSS: %-10s\t\t Giới hạn RSS: %s\n"
+" Äầu mã: %#-10lx\t\t Cuối mã: %#-10lx\n"
+" Äầu ngăn xếp: %#-10lx\n"
+" Con trỠngăn xếp (ESP): %#10lx\t Con trỠthể hiện (EIP): %#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"Äịnh thá»i\n"
+" Chính sách: %s\n"
+" Mức ưu tiên: %ld \t\t Mức ưu tiên RT: %ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "asprintf trong print_stat bị lỗi.\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "Tiến trình có PID %d không tồn tại.\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "Không thể mở tập tin thống kê vỠPID %d (%s)\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "Không thể cấp phát bộ nhớ cho proc_info\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "Không thể mở quét tập tin thống kê"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "Tùy chá»n không hợp lệ"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "Phải cung cấp ít nhất một PID (mã số tiến trình)."
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr ""
+"Chưa gắn \"/proc\" thì không thể lấy thống kê vỠ\"/proc/self/stat\".\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s trống rỗng (đã gắn chưa?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"Các dùng: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N kiểu ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" hoặc: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"Hiển thị một cây các tiến trình.\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments hiển thị tham số dòng lệnh\n"
+" -A, --ascii dùng chữ cái ASCII để vẽ dòng\n"
+" -c, --compact-not đừng nén gá»n các cây con thụt đầu dòng\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=KIỂU tô màu tiến trình theo thuộc tính\n"
+" (age)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids hiển thị id nhóm tiến trình; tương tự -c\n"
+" -G, --vt100 dùng VT100 để vẽ dòng ký tự\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all tô sáng tiến trình hiện tại và con cháu của nó\n"
+" -H PID, --highlight-pid=PID\n"
+" tô sáng tiến trình này và các con cháu của nó\n"
+" -l, --long đừng cắt ngắn các dòng dài\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort sắp xếp đầu ra theo PID\n"
+" -N KIỂU, --ns-sort=KIỂU\n"
+" sắp xếp đầu ra theo kiểu của không gian tên này\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids hiển thị các PID; cùng tác dụng với -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents hiển thị cha mẹ của tiến trình được chá»n\n"
+" -S, --ns-changes hiển thị các chuyển đổi không gian tên\n"
+" -t, --thread-names hiển thị đầy đủ các tên tuyến trình\n"
+" -T, --hide-threads ẩn tuyến trình, chỉ hiện tiến trình\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes hiển thị các thay đổi uid\n"
+" -U, --unicode dùng UTF-8 (Unicode) để vẽ dòng ký tự\n"
+" -V, --version hiển thị thông tin phiên bản\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z --security-context\n"
+" hiển thị thuộc tính bảo mật\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID bắt đầu ở PID này; mặc định là 1 (init)\n"
+" NGƯỜI_DÙNG hiển thị chỉ những cây có gốc là tiến trình của ngÆ°á»i dùng này\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "Chưa đặt TERM\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "Không thể lấy khả năng của thiết bị cuối\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "tập tin procfs cho không gian tên %s không sẵn có\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "Không có tên ngÆ°á»i dùng nhÆ° vậy: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "Không tìm thấy tiến trình %d.\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "Không tìm thấy tiến trình.\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "Bấm phím Enter để đóng\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr ""
+"%s: không hiểu tín hiệu; câu lệnh \"%s -l\" giúp bạn liệt kê các tín hiệu.\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Tác quyá»n © năm 1993-2021 của Werner Almesberger và Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "Cách dùng: killall [ -Z NGỮ_CẢNH ] [ -u NGƯỜI_DÙNG ] [ -y GIỜ ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s TÃN_HIỆU | -TÃN_HIỆU] TÊN…\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "Cách dùng: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N kiểu ]\n"
+#~ "Cách dùng: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N kiểu ]\n"
+#~ " [ -A | -G | -U ] [ PID | NGƯỜI_DÙNG]\n"
+#~ " pstree -V\n"
+#~ "\n"
+#~ "Hiển thị các tiến trình ở dạng cây.\n"
+#~ "\n"
+#~ " -a, --arguments hiển thị các đối số dòng lệnh\n"
+#~ " -A, --ascii dùng các ký tá»± ASCII để vẽ Ä‘Æ°á»ng kẻ\n"
+#~ " -c, --compact đừng kết lại các cây phụ giống nhau\n"
+#~ " -h, --highlight-alt tô sáng tiến trình đang chạy và các tiến trình cha "
+#~ "mẹ\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID tô sáng tiến trình này và các tiến trình cấp trên\n"
+#~ " -g, --show-pgids hiển thị id nhóm tiến trình; ngầm sử dụng -c\n"
+#~ " -G, --vt100 dùng các ký tá»± VT100 để vẽ Ä‘Æ°á»ng kẻ\n"
+#~ " -l, --long đừng cắt ngắn dòng dài\n"
+#~ " -n, --numeric-sort sắp xếp kết xuất theo PID (mã số tiến trình)\n"
+#~ " -N type,\n"
+#~ " --ns-sort=kiểu sắp xếp theo không gian tên (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids hiển thị các PID; ngầm sử dụng -c\n"
+#~ " -s, --show-parents hiển thị cha mẹ của tiến trình đã chá»n\n"
+#~ " -S, --ns-changes hiển thị sự chuyển tiếp không gian tên\n"
+#~ " -t, --thread-names hiển thị tên tuyến trình đầy đủ\n"
+#~ " -T, --hide-threads ẩn các tuyến trình, chỉ hiển thị tiến trình\n"
+#~ " -u, --uid-changes hiển thị các sá»± chuyển tiếp UID (mã số ngÆ°á»i dùng)\n"
+#~ " -U, --unicode dùng các ký tự thuộc bảng mã UTF-8 (Unicode) để vẽ "
+#~ "Ä‘Æ°á»ng kẻ\n"
+#~ " -V, --version hiển thị thông tin vỠphiên bản\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2014 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Tác quyá»n © năm 1993-2014 của Werner Almesberger và Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2009 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Tác quyá»n © 1993-2009 Werner Almesberger và Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Cách sử dụng: pidof [ -eg ] TÊN …\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e cần đến Ä‘iá»u khá»›p _chính xác_ vá»›i má»i tên rất dài\n"
+#~ "\tbỠqua nếu không có dòng lệnh sẵn sàng\n"
+#~ " -g hiện ID của _nhóm_ tiến trình thay thế ID tiến trình\n"
+#~ " -V hiện thông tin _phiên bản_\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2005 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bản quyá»n © 1993-2005 Werner Almesberger và Craig Small\n"
+#~ "\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644
index 0000000..00655fe
--- /dev/null
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..2bbe6ad
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,864 @@
+# Chinese translations for psmisc package / psmisc 软件包的简体中文翻译.
+# Copyright (C) 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+# LI Daobing <lidaobing@gmail.com>, 2007.
+# Wei-Lun Chao <bluebat@member.fsf.org>, 2009, 2013, 2015.
+# Mingye Wang <arthur200126@gmail.com>, 2015.
+# Boyuan Yang <073plan@gmail.com>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.7-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2024-02-14 10:56+0800\n"
+"Last-Translator: Wenbin Lv <wenbin816@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
+
+# -c 已挂载的文件系统
+# -f 此选项被悄悄忽略(为了 POSIX 兼容性)
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"用法:fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n 命å空间]\n"
+" [-k [-i] [-ä¿¡å·]] åå­—...\n"
+" fuser -l\n"
+" fuser -V\n"
+"显示哪些进程使用指定的文件ã€ç«¯å£æˆ–文件系统。\n"
+"\n"
+" -a,--all 也显示未使用的文件\n"
+" -i,--interactive æ€æ­»ç¨‹åºå‰è¯¢é—® (未指定 -k 选项时被忽略)\n"
+" -I,--inode 总是使用 inode æ¥æ¯”较文件\n"
+" -k,--kill æ€æ­»è®¿é—®æŒ‡å®šæ–‡ä»¶çš„进程\n"
+" -l,--list-signals 列出å¯ç”¨çš„ä¿¡å·å\n"
+" -m,--mount 显示所有使用指定文件系统或å—设备的进程\n"
+" -M,--ismountpoint åªåœ¨ <åå­—> 为挂载点时完æˆè¦æ±‚\n"
+" -n,--namespace 空间 在指定命å空间中查找 (fileã€udp 或 tcp)\n"
+" -s,--silent ä¸è¾“出信æ¯\n"
+" -ä¿¡å· å‘é€æŒ‡å®šçš„ \"ä¿¡å·\" 而ä¸æ˜¯ SIGKILL\n"
+" -u,--user 显示用户 ID\n"
+" -v,--verbose 输出更多信æ¯\n"
+" -w,--writeonly åªæ€æ­»æœ‰æƒå†™å…¥çš„进程\n"
+" -V,--version 显示版本信æ¯\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 仅查找 IPv4 套接字\n"
+" -6,--ipv6 仅查找 IPv6 套接字\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" udp/tcp åå­—: [本地端å£][,[远程主机][,[远程端å£]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, c-format
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 1993-2024 Werner Almesberger 和 Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc ä¸æ供任何ä¿è¯ã€‚\n"
+"该程åºä¸ºè‡ªç”±è½¯ä»¶ï¼Œæ¬¢è¿Žä½ åœ¨ GNU 通用公共许å¯è¯ (GPL) 下é‡æ–°å‘布。\n"
+"详情å¯å‚阅 COPYING 文件。\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "无法打开 /proc 目录: %s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "无法为已找到的进程分é…内存: %s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "指定的文件å %s ä¸å­˜åœ¨ã€‚\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "æ— æ³•åˆ†æž %s: %s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "无法解æžæœ¬åœ°ç«¯å£ %s: %s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "æœªçŸ¥æœ¬åœ°ç«¯å£ AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "无法打开å议文件 \"%s\": %s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "指定的文件å %s 并éžæŒ‚载点。\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s:无效的选项 %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "命å空间选项需è¦ä¸€ä¸ªå‚数。"
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "无效的命å空间å"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "ä½ åªèƒ½ä½¿ç”¨æœ‰æŒ‚载点选项的文件"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "未指定进程"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "所有选项都ä¸èƒ½ä¸Žä¸è¾“出信æ¯é€‰é¡¹åŒæ—¶ä½¿ç”¨ã€‚"
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "你无法åŒæ—¶æœç´¢ IPv4 å’Œ IPv6 端å£"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s 用户 è¿›ç¨‹å· æƒé™ 命令\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(未知)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "æ— æ³•èŽ·å– %s 的文件状æ€: %s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "无法打开 /proc/net/unix: %s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "æ€æ­»è¿›ç¨‹ %d ? (y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "无法æ€æ­»è¿›ç¨‹ %d: %s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "无法打开网络端å£ã€‚\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "无法找到 socket 的设备å·ã€‚\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "æ€æ­» %s(%s%d) ? (y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "ä¿¡å· %s(%s%d) ? (y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall: 无法从进程状æ€èŽ·å–用户ID(UID)\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall: ä¸å½“的正则表达å¼: %s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall: 跳过部分符åˆçš„部分 %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "%s(%s%d) è¢«ä¿¡å· %d æ€æ­»\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s: 未找到进程\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "用法: killall [选项]... [--] 进程å...\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact 对长åå­—è¦æ±‚严格匹é…\n"
+" -I,--ignore-case 匹é…进程å时忽略大å°å†™\n"
+" -g,--process-group æ€æ­»è¿›ç¨‹ç»„而ä¸æ˜¯è¿›ç¨‹\n"
+" -y,--younger-than æ€æ­»æ¯”指定<时间>年轻的进程\n"
+" -o,--older-than æ€æ­»æ¯”指定<时间>å¹´è€çš„进程\n"
+" -i,--interactive 在æ€æ­»è¿›ç¨‹å‰è¦æ±‚确认\n"
+" -l,--list 列出所有的信å·å\n"
+" -q,--quiet ä¸è¦æ‰“å°æŠ±æ€¨ä¿¡æ¯\n"
+" -r,--regexp å°† \"进程å\" 视为扩展正则表达å¼\n"
+" -s,--signal ä¿¡å· å‘é€æŒ‡å®š \"ä¿¡å·\" 而ä¸æ˜¯ SIGTERM\n"
+" -u,--user 用户 ä»…æ€æ­»æŒ‡å®š \"用户\" 的进程\n"
+" -v,--verbose 报告信å·æ˜¯å¦æˆåŠŸé€å‡º\n"
+" -V,--version 显示版本信æ¯\n"
+" -w,--wait 等待进程死亡\n"
+" -n,--ns è¿›ç¨‹å· åŒ¹é…与指定<进程å·>具有相åŒå‘½å空间的进程\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context æ­£åˆ™è¡¨è¾¾å¼ ä»…æ€æ­»å«æœ‰æŒ‡å®šä¸Šä¸‹æ–‡çš„进程\n"
+" (必须在其他å‚æ•°å‰ä½¿ç”¨)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "无效的时间格å¼"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "无法找到用户 %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "无效的命å空间进程å·ï¼ˆPID)"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "错误的正则表达å¼: %s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall: 最大åå­—æ•°é‡æ˜¯ %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall: %s ä¸å«è¿›ç¨‹ä¿¡æ¯é¡¹ (未挂载?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "绑定到 %i å·è¿›ç¨‹æ—¶å‘生错误\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"Copyright © 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"用法: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <进程å·> [<文件å·> ..]\n"
+" -8, --eight-bit-clean 输出干净的8ä½æ•°æ®æµã€‚\n"
+" -n, --no-headers ä¸æ˜¾ç¤ºæ–‡ä»¶æ述符头的读写信æ¯ã€‚\n"
+" -c, --follow 也检测新的å­è¿›ç¨‹ã€‚\n"
+" -t, --tgid 检测 tgid 等于<进程å·>的所有线程。\n"
+" -d, --duplicates-removed 从输出中删除é‡å¤çš„读写信æ¯ã€‚\n"
+" -V, --version 输出版本信æ¯ã€‚\n"
+" -h, --help 输出本帮助信æ¯ã€‚\n"
+"\n"
+" 按下 CTRL-C æ¥ç»ˆæ­¢è¾“出。\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"用法:prtstat [选项] PID…\n"
+" prtstat -V\n"
+"打å°è¿›ç¨‹çš„相关信æ¯\n"
+" -r,--raw 显示信æ¯çš„原始样å¼\n"
+" -V,--version 显示版本信æ¯ç„¶åŽç¦»å¼€\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, c-format
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"Copyright © 2009-2024 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "è¿è¡Œä¸­"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "æš‚åœä¸­"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "ç£ç›˜æš‚åœ"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "僵尸"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "追踪"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "分页"
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "未知"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"进程: %-14s\t\t状æ€ï¼š%c (%s)\n"
+" CPU#: %-3d\t\tTTY:%s\t线程:%ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"进程ã€ç¾¤ç»„å’Œè¿è¡Œé˜¶æ®µè¯†åˆ«ç \n"
+" 进程识别å·ï¼š%d\t\t 上层识别å·ï¼š%d\n"
+" 群组识别å·ï¼š%d\t\t è¿è¡Œé˜¶æ®µè¯†åˆ«ç ï¼š%d\n"
+" T 群组识别å·ï¼š%d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"分页错误\n"
+" 此进程 (æ¬¡è¦ ä¸»è¦):%8lu %8lu\n"
+" å­è¿›ç¨‹ (æ¬¡è¦ ä¸»è¦):%8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU 时间\n"
+" 此进程 (用户 系统 访客 区å—输出入):%6.2f %6.2f %6.2f %6.2f\n"
+" å­è¿›ç¨‹ (用户 系统 访客): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"内存\n"
+" Vsize: %-10s\n"
+" RSS: %-10s\t\t RSS é™åˆ¶ï¼š%s\n"
+" 程åºå¼€å§‹ï¼š %#-10lx\t\t 程åºåœæ­¢ï¼š %#-10lx\n"
+" 堆栈开始: %#-10lx\n"
+" 堆栈指针 (ESP):%#10lx\t 指令指针 (EIP):%#10lx\n"
+
+# “å‹å¥½â€, or "Nice" 指的是é™æ€ä¼˜å…ˆçº§ã€‚进程越å‹å¥½ï¼ŒNice 值越高,也就越倾å‘于分出时间给其他进程——æ¢å¥è¯è¯´å°±æ˜¯ä¼˜å…ˆçº§ä½Žäº†ã€‚
+# 说ç€å‹å¥½ï¼Œæˆ‘就想到知乎的å‹å–„度了,啊呀。
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"调度\n"
+" 策略:%s\n"
+" å‹å¥½ï¼š%ld \t\t 实时优先级:%ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "print_stat 中的 asprintf 失败。\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "具有 pid %d 的进程ä¸å­˜åœ¨ã€‚\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "无法打开 pid %d (%s) 的 stat 文件\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "无法为 proc_info 分é…内存\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "无法扫æ stat 文件"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "无效的选项"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "您必须æ供至少一个 PID。"
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc 未被挂载,无法å–å¾— /proc/self/stat 的状æ€ã€‚\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s 是空的 (未挂载?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"用法:pstree [-acglpsStTuZ] [ -h | -H è¿›ç¨‹å· ] [ -n | -N 类型 ]\n"
+" [ -A | -G | -U ] [ è¿›ç¨‹å· | 用户 ]\n"
+" 或:pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"显示进程树。\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments 显示命令行å‚æ•°\n"
+" -A, --ascii 使用 ASCII 行绘制字符\n"
+" -c, --compact-not ä¸è¦å¯¹å®Œå…¨ç›¸åŒçš„å­æ ‘进行压缩\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr ""
+" -C, --color=类型 按照指定属性对进程上色\n"
+" (age)\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids 显示进程组 IDï¼›éšå«å¯ç”¨ -c 选项\n"
+" -G, --vt100 使用 VT100 行绘制字符\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all 高亮显示当å‰è¿›ç¨‹å’Œå…¶æ‰€æœ‰ç¥–å…ˆ\n"
+" -H PID, --highlight-pid=PID\n"
+" 高亮显示指定 PID 对应的进程和其所有祖先\n"
+" -l, --long ä¸è¦æˆªæ–­é•¿è¡Œ\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort 按照 PID 对输出进行排åº\n"
+" -N 类型, --ns-sort=类型\n"
+" 按照指定命å空间类型对输出进行排åº\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids 显示 PIDï¼›éšå«å¯ç”¨ -c 选项\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents 显示所选进程的父进程\n"
+" -S, --ns-changes 显示命å空间的å˜åŒ–\n"
+" -t, --thread-names 显示完整线程å称\n"
+" -T, --hide-threads éšè—线程,åªæ˜¾ç¤ºè¿›ç¨‹\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes 显示用户 ID(UID)的å˜åŒ–\n"
+" -U, --unicode 使用 UTF-8(Unicode)的行绘制字符\n"
+" -V, --version 显示版本信æ¯\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" 显示安全属性\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" è¿›ç¨‹å· ä»ŽæŒ‡å®šè¿›ç¨‹å·å¼€å§‹ï¼›é»˜è®¤ä¸º 1(init)\n"
+" 用户 仅显示从指定用户的进程开始的进程树\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "未设置 TERM 环境å˜é‡\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "无法获å–终端功能\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "适用 %s 命å空间的 proc 文件ä¸å¯ç”¨\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "无用户å: %s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "未找到进程 %d。\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "未找到进程。\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "按回车以关闭\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: 未知的信å·; %s -l 显示信å·åˆ—表。\n"
+
+# GPL Howto 说了,ä¸è¦ç¿»è¯‘ Copyright.
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2021 Werner Almesberger 和 Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "用法:killall [ -Z 上下文 ] [ -u 用户å ] [ -y 时间 ] [ -o 时间 ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s ä¿¡å· | -ä¿¡å· ] 程åºå...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "用法:pstree [-acglpsStTu] [ -h | -H è¿›ç¨‹å· ] [ -n | -N 类型 ]\n"
+#~ " [ -A | -G | -U ] [ è¿›ç¨‹å· | 用户 ]\n"
+#~ " 或:pstree -V\n"
+
+# GPL Howto 说了,ä¸è¦ç¿»è¯‘ Copyright.
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "版æƒæ‰€æœ‰ © 1993-2019 Werner Almesberger å’Œ Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "用法:pstree [-acglpsStuZ] [ -h | -H è¿›ç¨‹å· ] [ -n | -N 类型 ]\n"
+#~ "用法:pstree [-acglpsStu] [ -h | -H è¿›ç¨‹å· ] [ -n | -N 类型 ]\n"
+#~ " [ -A | -G | -U ] [ è¿›ç¨‹å· | 用户 ]\n"
+#~ " pstree -V\n"
+#~ "显示进程树。\n"
+#~ "\n"
+#~ " -a, --arguments 显示命令行å‚æ•°\n"
+#~ " -A, --ascii 使用 ASCII 划线符\n"
+#~ " -c, --compact ä¸åŽ‹ç¼©ç›¸åŒçš„å­æ ‘\n"
+#~ " -h, --highlight-all 高亮显示当å‰è¿›ç¨‹åŠå…¶ç¥–å…ˆ\n"
+#~ " -H 进程å·,\n"
+#~ " --highlight-pid=è¿›ç¨‹å· é«˜äº®æ˜¾ç¤ºæŒ‡å®š<进程å·>对应的进程当åŠå…¶ç¥–å…ˆ\n"
+#~ " -g, --show-pgids 显示进程组IDï¼›éšå«å¯ç”¨ -c\n"
+#~ " -G, --vt100 使用 VT100 划线符\n"
+#~ " -l, --long ä¸æˆªæ–­é•¿è¡Œ\n"
+#~ " -n, --numeric-sort 输出按进程å·æŽ’åº\n"
+#~ " -N type,\n"
+#~ " --ns-sort=类型 按命å空间类型排åºï¼ˆcgroup, ipc, mnt, net, pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids 显示进程å·ï¼›éšå« -c\n"
+#~ " -s, --show-parents 显示所选中进程的父进程\n"
+#~ " -S, --ns-changes 显示命å空间å˜æ¢\n"
+#~ " -t, --thread-names 显示完整线程å\n"
+#~ " -T, --hide-threads éšè—线程,åªæ˜¾ç¤ºè¿›ç¨‹\n"
+#~ " -u, --uid-changes 显示用户åå˜æ¢\n"
+#~ " -U, --unicode 使用 UTF-8(Unicode)划线符\n"
+#~ " -V, --version 显示版本信æ¯\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2009 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Copyright © 1993-2005 Werner Almesberger 和 Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pidof [ -eg ] NAME...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e require exact match for very long names;\n"
+#~ " skip if the command line is unavailable\n"
+#~ " -g show process group ID instead of process ID\n"
+#~ " -V display version information\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法: pidof [ -eg ] 程åºå...\n"
+#~ " pidof -V\n"
+#~ "\n"
+#~ " -e 对长程åºå需è¦ä¸¥æ ¼åŒ¹é…\n"
+#~ " 如果命令行ä¸å¯ç”¨åˆ™å¿½ç•¥è¯¥é€‰é¡¹\n"
+#~ " -g 显示进程组ID而ä¸æ˜¯è¿›ç¨‹ID\n"
+#~ " -V 显示版本信æ¯\n"
+#~ "\n"
+
+#~ msgid "Cannot stat mount point %s: %s\n"
+#~ msgstr "无法分æžæŒ‚载点 %s: %s\n"
+
+#~ msgid "You cannot use the mounted and mountpoint flags together"
+#~ msgstr "ä½ ä¸èƒ½åŒæ—¶æ˜¯ç”¨å·²æŒ‚载和挂载点选项"
+
+#~ msgid "Cannot open /etc/mtab: %s\n"
+#~ msgstr "无法打开 /etc/mtab: %s\n"
+
+#~ msgid "Internal error: MAX_DEPTH not big enough.\n"
+#~ msgstr "内部错误: MAX_DEPTH ä¸å¤Ÿå¤§ã€‚\n"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
new file mode 100644
index 0000000..45a63d7
--- /dev/null
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..0efaac3
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,834 @@
+# Traditional Chinese Messages for psmisc.
+# Copyright (C) 2021 Free Software Foundation, Inc.
+# This file is distributed under the same license as the psmisc package.
+#
+# Wei-Lun Chao <bluebat@member.fsf.org>, 2009, 2013, 2015.
+# pan93412 <pan93412@gmail.com>, 2018, 2019, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: psmisc 23.6-rc1\n"
+"Report-Msgid-Bugs-To: csmall@dropbear.xyz\n"
+"POT-Creation-Date: 2024-03-03 21:55+1100\n"
+"PO-Revision-Date: 2022-12-16 19:36+0800\n"
+"Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@lists.linux.org.tw>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#: src/fuser.c:146
+#, c-format
+msgid ""
+"Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+" [-k [-i] [-SIGNAL]] NAME...\n"
+" fuser -l\n"
+" fuser -V\n"
+"Show which processes use the named files, sockets, or filesystems.\n"
+"\n"
+" -a,--all display unused files too\n"
+" -i,--interactive ask before killing (ignored without -k)\n"
+" -I,--inode use always inodes to compare files\n"
+" -k,--kill kill processes accessing the named file\n"
+" -l,--list-signals list available signal names\n"
+" -m,--mount show all processes using the named filesystems or\n"
+" block device\n"
+" -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+" -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+" -s,--silent silent operation\n"
+" -SIGNAL send this signal instead of SIGKILL\n"
+" -u,--user display user IDs\n"
+" -v,--verbose verbose output\n"
+" -w,--writeonly kill only processes with write access\n"
+" -V,--version display version information\n"
+msgstr ""
+"用法: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n 空白]\n"
+" [-k [-i] [-SIGNAL]] å稱...\n"
+" fuser -l\n"
+" fuser -V\n"
+"顯示哪個執行程åºä½¿ç”¨äº†è©²å稱的檔案ã€æŽ¥å£æˆ–檔案系統。\n"
+"\n"
+" -a,--all 亦顯示未用到檔案\n"
+" -i,--interactive 強制åœæ­¢åŸ·è¡Œç¨‹åºå‰è©¢å• (若沒有 -k åƒæ•¸å‰‡å¿½ç•¥)\n"
+" -I,--inode 始終使用 inode 來比較檔案\n"
+" -k,--kill 強制åœæ­¢å­˜å–該å稱檔案的執行程åº\n"
+" -l,--list-signals 列出å¯ç”¨çš„信號å稱\n"
+" -m,--mount 顯示所有使用該å稱的檔案系統或\n"
+" block å€å¡Šè£ç½®çš„執行程åº\n"
+" -M,--ismountpoint åªæœ‰ç•¶å稱是掛載點時æ‰å®Œå…¨é”到è¦æ±‚\n"
+" -n,--namespace 空間 在這個命å空間中æœå°‹ (檔案ã€udp 或 tcp)\n"
+" -s,--silent 安éœåœ°ä½œæ¥­\n"
+" -SIGNAL 發é€é€™å€‹ä¿¡è™Ÿä»¥ä»£æ›¿ SIGKILL\n"
+" -u,--user 顯示使用者識別號\n"
+" -v,--verbose 詳細的輸出\n"
+" -w,--writeonly åªç é™¤æœ‰å¯«å…¥æ¬Šé™çš„行程\n"
+" -V,--version 顯示版本資訊\n"
+
+#: src/fuser.c:167
+#, c-format
+msgid ""
+" -4,--ipv4 search IPv4 sockets only\n"
+" -6,--ipv6 search IPv6 sockets only\n"
+msgstr ""
+" -4,--ipv4 åªæœå°‹ IPv4 通訊端\n"
+" -6,--ipv6 åªæœå°‹ IPv6 通訊端\n"
+
+#: src/fuser.c:170
+#, c-format
+msgid ""
+" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n"
+"\n"
+msgstr ""
+" udp/tcp å稱:[本地埠號][,[é ç«¯ä¸»æ©Ÿ][,[é ç«¯åŸ è™Ÿ]]]\n"
+"\n"
+
+#: src/fuser.c:176
+#, c-format
+msgid "fuser (PSmisc) %s\n"
+msgstr "fuser (PSmisc) %s\n"
+
+#: src/fuser.c:178 src/killall.c:870 src/pstree.c:1337
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 1993-2022 Werner Almesberger and Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n"
+"\n"
+msgstr ""
+"著作權所有 © 1993-2022 Werner Almesberger 和 Craig Small\n"
+"\n"
+
+#: src/fuser.c:180 src/killall.c:872 src/peekfd.c:195 src/prtstat.c:68
+#: src/pstree.c:1339
+#, c-format
+msgid ""
+"PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+"This is free software, and you are welcome to redistribute it under\n"
+"the terms of the GNU General Public License.\n"
+"For more information about these matters, see the files named COPYING.\n"
+msgstr ""
+"PSmisc 完全ä¸é™„帶任何擔ä¿ã€‚\n"
+"這是自由軟體,並且歡迎您ä¾ç…§ GNU 通用公共授權\n"
+"來å†æ¬¡æ•£å¸ƒå®ƒã€‚\n"
+"è«‹åƒçœ‹å為 COPYING 的檔案,以ç²å¾—更多關於這些å•é¡Œçš„資訊。\n"
+
+#: src/fuser.c:202
+#, c-format
+msgid "Cannot open /proc directory: %s\n"
+msgstr "無法開啟 /proc 目錄:%s\n"
+
+#: src/fuser.c:404 src/fuser.c:463
+#, c-format
+msgid "Cannot allocate memory for matched proc: %s\n"
+msgstr "無法為符åˆçš„行程é…置記憶體:%s\n"
+
+#: src/fuser.c:494
+#, c-format
+msgid "Specified filename %s does not exist.\n"
+msgstr "指定的檔å %s ä¸å­˜åœ¨ã€‚\n"
+
+#: src/fuser.c:497
+#, c-format
+msgid "Cannot stat %s: %s\n"
+msgstr "無法顯示 %s:%s\n"
+
+#: src/fuser.c:649
+#, c-format
+msgid "Cannot resolve local port %s: %s\n"
+msgstr "無法解æžæœ¬æ©Ÿé€šè¨ŠåŸ  %s:%s\n"
+
+#: src/fuser.c:670
+#, c-format
+msgid "Unknown local port AF %d\n"
+msgstr "ä¸æ˜Žçš„本機通訊埠 AF %d\n"
+
+#: src/fuser.c:753
+#, c-format
+msgid "Cannot open protocol file \"%s\": %s\n"
+msgstr "無法開啟å”定檔案「%sã€ï¼š%s\n"
+
+#: src/fuser.c:1079
+#, c-format
+msgid "Specified filename %s is not a mountpoint.\n"
+msgstr "指定的檔å %s 並éžæŽ›è¼‰é»žã€‚\n"
+
+#: src/fuser.c:1175
+#, c-format
+msgid "%s: Invalid option %s\n"
+msgstr "%s:無效的é¸é … %s\n"
+
+#: src/fuser.c:1230
+msgid "Namespace option requires an argument."
+msgstr "命å空間é¸é …需è¦ä¸€å€‹å¼•æ•¸ã€‚"
+
+#: src/fuser.c:1242
+msgid "Invalid namespace name"
+msgstr "無效的命å空間å稱"
+
+#: src/fuser.c:1309
+msgid "You can only use files with mountpoint options"
+msgstr "您åªèƒ½ä½¿ç”¨å…·å‚™æŽ›è¼‰é»žé¸é …的檔案"
+
+#: src/fuser.c:1356
+msgid "No process specification given"
+msgstr "沒有給定任何行程è¦æ ¼"
+
+#: src/fuser.c:1373
+msgid "all option cannot be used with silent option."
+msgstr "所有é¸é …無法與安éœé¸é …一起使用。"
+
+#: src/fuser.c:1378
+msgid "You cannot search for only IPv4 and only IPv6 sockets at the same time"
+msgstr "您無法åŒæ™‚åªæœå°‹ IPv4 åˆåªæœå°‹ IPv6 通訊端"
+
+#: src/fuser.c:1474
+#, c-format
+msgid "%*s USER PID ACCESS COMMAND\n"
+msgstr "%*s 使用者 PID å­˜å–命令\n"
+
+#: src/fuser.c:1508 src/fuser.c:1554
+msgid "(unknown)"
+msgstr "(ä¸æ˜Ž)"
+
+#: src/fuser.c:1650 src/fuser.c:1706
+#, c-format
+msgid "Cannot stat file %s: %s\n"
+msgstr "無法顯示檔案 %s:%s\n"
+
+#: src/fuser.c:1803
+#, c-format
+msgid "Cannot open /proc/net/unix: %s\n"
+msgstr "無法開啟 /proc/net/unix:%s\n"
+
+#: src/fuser.c:1909
+#, c-format
+msgid "Kill process %d ? (y/N) "
+msgstr "ç é™¤è¡Œç¨‹ %d?(y/N) "
+
+#: src/fuser.c:1950
+#, c-format
+msgid "Could not kill process %d: %s\n"
+msgstr "無法ç é™¤è¡Œç¨‹ %d:%s\n"
+
+#: src/fuser.c:1966
+#, c-format
+msgid "Cannot open a network socket.\n"
+msgstr "無法開啟網路通訊端。\n"
+
+#: src/fuser.c:1971
+#, c-format
+msgid "Cannot find socket's device number.\n"
+msgstr "找ä¸åˆ°é€šè¨Šç«¯è£ç½®ç·¨è™Ÿã€‚\n"
+
+#: src/killall.c:111
+#, c-format
+msgid "Kill %s(%s%d) ? (y/N) "
+msgstr "ç é™¤ %s(%s%d)?(y/N) "
+
+#: src/killall.c:114
+#, c-format
+msgid "Signal %s(%s%d) ? (y/N) "
+msgstr "信號 %s(%s%d)?(y/N) "
+
+#: src/killall.c:262
+#, c-format
+msgid "killall: Cannot get UID from process status\n"
+msgstr "killall:無法從程åºç‹€æ…‹æå– UID\n"
+
+#: src/killall.c:368
+#, c-format
+msgid "killall: Bad regular expression: %s\n"
+msgstr "killall:ä¸ç•¶çš„æ­£è¦è¡¨ç¤ºå¼ï¼š%s\n"
+
+#: src/killall.c:525
+#, c-format
+msgid "killall: skipping partial match %s(%d)\n"
+msgstr "killall:跳éŽéƒ¨åˆ†åŒ¹é… %s(%d)\n"
+
+#: src/killall.c:775
+#, c-format
+msgid "Killed %s(%s%d) with signal %d\n"
+msgstr "藉由信號 %4$d ç é™¤ %1$s(%2$s%3$d)\n"
+
+#: src/killall.c:796
+#, c-format
+msgid "%s: no process found\n"
+msgstr "%s:找ä¸åˆ°ä»»ä½•è¡Œç¨‹\n"
+
+#: src/killall.c:837
+#, c-format
+msgid "Usage: killall [OPTION]... [--] NAME...\n"
+msgstr "用法:killall [é¸é …]… [--] å稱…\n"
+
+#: src/killall.c:839
+#, c-format
+msgid ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact require exact match for very long names\n"
+" -I,--ignore-case case insensitive process name match\n"
+" -g,--process-group kill process group instead of process\n"
+" -y,--younger-than kill processes younger than TIME\n"
+" -o,--older-than kill processes older than TIME\n"
+" -i,--interactive ask for confirmation before killing\n"
+" -l,--list list all known signal names\n"
+" -q,--quiet don't print complaints\n"
+" -r,--regexp interpret NAME as an extended regular expression\n"
+" -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+" -u,--user USER kill only process(es) running as USER\n"
+" -v,--verbose report if the signal was successfully sent\n"
+" -V,--version display version information\n"
+" -w,--wait wait for processes to die\n"
+" -n,--ns PID match processes that belong to the same namespaces\n"
+" as PID\n"
+msgstr ""
+" killall -l, --list\n"
+" killall -V, --version\n"
+"\n"
+" -e,--exact å°æ–¼å¾ˆé•·çš„å稱需è¦ç²¾ç¢ºçš„符åˆ\n"
+" -I,--ignore-case 行程å稱符åˆæ™‚大å°å¯«ä¸é ˆç›¸ç¬¦\n"
+" -g,--process-group ç é™¤è¡Œç¨‹ç¾¤çµ„以代替行程\n"
+" -y,--younger-than ç é™¤æ™‚間較新的行程\n"
+" -o,--older-than ç é™¤æ™‚間較舊的行程\n"
+" -i,--interactive ç é™¤ä¹‹å‰å¾µè©¢ç¢ºèª\n"
+" -l,--list 列出所有已知信號å稱\n"
+" -q,--quiet ä¸å°å‡ºæŠ±æ€¨è¨Šæ¯\n"
+" -r,--regexp å°‡å稱以進階正è¦è¡¨ç¤ºå¼è§£è­¯\n"
+" -s,--signal 信號 發é€é€™å€‹ä¿¡è™Ÿä»¥ä»£æ›¿ SIGTERM\n"
+" -u,--user 使用者 åªç é™¤æŒ‡å®šä½¿ç”¨è€…執行的行程\n"
+" -v,--verbose 如果信號已被æˆåŠŸç™¼é€å‰‡å›žå ±\n"
+" -V,--version 顯示版本資訊\n"
+" -w,--wait 等待行程的消滅\n"
+" -n,--ns PID 符åˆå±¬æ–¼èˆ‡ PID 相åŒå‘½å空間的執行程åº\n"
+
+#: src/killall.c:859
+#, c-format
+msgid ""
+" -Z,--context REGEXP kill only process(es) having context\n"
+" (must precede other arguments)\n"
+msgstr ""
+" -Z,--context REGEXP åªç é™¤æœ‰æ­¤ä¸Šä¸‹æ–‡çš„行程\n"
+" (å¿…é ˆä½æ–¼å…¶ä»–引數之å‰)\n"
+
+#: src/killall.c:955 src/killall.c:961
+msgid "Invalid time format"
+msgstr "無效的時間格å¼"
+
+#: src/killall.c:981
+#, c-format
+msgid "Cannot find user %s\n"
+msgstr "找ä¸åˆ°ä½¿ç”¨è€… %s\n"
+
+#: src/killall.c:1016
+msgid "Invalid namespace PID"
+msgstr "無效的命å空間 PID"
+
+#: src/killall.c:1023
+#, c-format
+msgid "Bad regular expression: %s\n"
+msgstr "ä¸ç•¶çš„æ­£è¦è¡¨ç¤ºå¼ï¼š%s\n"
+
+#: src/killall.c:1057
+#, c-format
+msgid "killall: Maximum number of names is %d\n"
+msgstr "killall:å稱數é‡æœ€å¤§å€¼æ˜¯ %d\n"
+
+#: src/killall.c:1062
+#, c-format
+msgid "killall: %s lacks process entries (not mounted ?)\n"
+msgstr "killall:%s 缺ä¹è¡Œç¨‹æ¢ç›® (未掛載?)\n"
+
+#: src/peekfd.c:183
+#, c-format
+msgid "Error attaching to pid %i\n"
+msgstr "附加到 pid %i 時發生錯誤\n"
+
+#: src/peekfd.c:191
+#, c-format
+msgid "peekfd (PSmisc) %s\n"
+msgstr "peekfd (PSmisc) %s\n"
+
+#: src/peekfd.c:193
+#, c-format
+msgid ""
+"Copyright (C) 2007 Trent Waddington\n"
+"\n"
+msgstr ""
+"著作權 © 2007 Trent Waddington\n"
+"\n"
+
+#: src/peekfd.c:203
+#, c-format
+msgid ""
+"Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean output 8 bit clean streams.\n"
+" -n, --no-headers don't display read/write from fd headers.\n"
+" -c, --follow peek at any new child processes too.\n"
+" -t, --tgid peek at all threads where tgid equals "
+"<pid>.\n"
+" -d, --duplicates-removed remove duplicate read/writes from the "
+"output.\n"
+" -V, --version prints version info.\n"
+" -h, --help prints this help.\n"
+"\n"
+" Press CTRL-C to end output.\n"
+msgstr ""
+"用法:peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8 輸出ä¸å«ç¬¬å…«ä½å…ƒçš„資料æµã€‚\n"
+" -n ä¸å¾ž fd 標頭顯示讀å–/寫入。\n"
+" -c 也å–自任何新的å­è¡Œç¨‹ã€‚\n"
+" -d 從輸出移除é‡è¤‡çš„讀å–/寫入。\n"
+" -V å°å‡ºç‰ˆæœ¬è³‡è¨Šã€‚\n"
+" -h å°å‡ºé€™å€‹èªªæ˜Žã€‚\n"
+"\n"
+" 按下 CTRL-C 以çµæŸè¼¸å‡ºã€‚\n"
+"用法:peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+" -8, --eight-bit-clean 輸出 8 ä½å…ƒ clean 串æµã€‚\n"
+" -n, --no-headers ä¸é¡¯ç¤ºä¾†è‡ª fd 標頭的讀å–與寫入\n"
+" -c, --follow 亦跳至任何新的å­åŸ·è¡Œç¨‹åº\n"
+" -t, --tgid 跳至 tgid 等於 <pid> 的所有線程.\n"
+" -d, --duplicates-removed 從輸出中移除é‡è¤‡çš„讀å–與寫入\n"
+" -V, --version 顯示版本資訊\n"
+" -h, --help 顯示此說明\n"
+"\n"
+" 輸入 CTRL-C çµæŸè¼¸å‡ºã€‚\n"
+
+#: src/prtstat.c:54
+#, c-format
+msgid ""
+"Usage: prtstat [options] PID ...\n"
+" prtstat -V\n"
+"Print information about a process\n"
+" -r,--raw Raw display of information\n"
+" -V,--version Display version information and exit\n"
+msgstr ""
+"用法:prtstat [é¸é …] PID…\n"
+" prtstat -V\n"
+"å°å‡ºè¡Œç¨‹çš„相關資訊\n"
+" -r,--raw 資訊的原始顯示\n"
+" -V,--version 顯示版本資訊然後離開\n"
+
+#: src/prtstat.c:65
+#, c-format
+msgid "prtstat (PSmisc) %s\n"
+msgstr "prtstat (PSmisc) %s\n"
+
+#: src/prtstat.c:66
+#, fuzzy, c-format
+#| msgid ""
+#| "Copyright (C) 2009-2022 Craig Small\n"
+#| "\n"
+msgid ""
+"Copyright (C) 2009-2024 Craig Small\n"
+"\n"
+msgstr ""
+"著作權所有 © 2009-2022 Craig Small\n"
+"\n"
+
+#: src/prtstat.c:78
+msgid "running"
+msgstr "執行中"
+
+#: src/prtstat.c:80
+msgid "sleeping"
+msgstr "æš«åœä¸­"
+
+#: src/prtstat.c:82
+msgid "disk sleep"
+msgstr "ç£ç¢Ÿæš«åœ"
+
+#: src/prtstat.c:84
+msgid "zombie"
+msgstr "æ®­å±"
+
+#: src/prtstat.c:86
+msgid "traced"
+msgstr "追蹤"
+
+#: src/prtstat.c:88
+msgid "paging"
+msgstr "分é "
+
+#: src/prtstat.c:90
+msgid "unknown"
+msgstr "ä¸æ˜Ž"
+
+#: src/prtstat.c:164
+#, c-format
+msgid ""
+"Process: %-14s\t\tState: %c (%s)\n"
+" CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"
+msgstr ""
+"行程:%-14s\t\t狀態:%c (%s)\n"
+" CPU#: %-3d\t\tTTY:%s\t執行緒:%ld\n"
+
+#: src/prtstat.c:169
+#, c-format
+msgid ""
+"Process, Group and Session IDs\n"
+" Process ID: %d\t\t Parent ID: %d\n"
+" Group ID: %d\t\t Session ID: %d\n"
+" T Group ID: %d\n"
+"\n"
+msgstr ""
+"行程ã€ç¾¤çµ„和執行階段識別碼\n"
+" 行程識別號:%d\t\t 上層識別號:%d\n"
+" 群組識別號:%d\t\t 執行階段識別碼:%d\n"
+" T 群組識別號:%d\n"
+"\n"
+
+#: src/prtstat.c:175
+#, c-format
+msgid ""
+"Page Faults\n"
+" This Process (minor major): %8lu %8lu\n"
+" Child Processes (minor major): %8lu %8lu\n"
+msgstr ""
+"分é éŒ¯èª¤\n"
+" 此行程 (æ¬¡è¦ ä¸»è¦):%8lu %8lu\n"
+" å­è¡Œç¨‹ (æ¬¡è¦ ä¸»è¦):%8lu %8lu\n"
+
+#: src/prtstat.c:180
+#, c-format
+msgid ""
+"CPU Times\n"
+" This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+" Child processes (user system guest): %6.2f %6.2f %6.2f\n"
+msgstr ""
+"CPU 時間\n"
+" 此行程 (使用者 系統 訪客 å€å¡Šè¼¸å‡ºå…¥):%6.2f %6.2f %6.2f %6.2f\n"
+" å­è¡Œç¨‹ (使用者 系統 訪客): %6.2f %6.2f %6.2f\n"
+
+#: src/prtstat.c:189
+#, c-format
+msgid ""
+"Memory\n"
+" Vsize: %-10s\n"
+" RSS: %-10s \t\t RSS Limit: %s\n"
+" Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+" Stack Start: %#-10lx\n"
+" Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"
+msgstr ""
+"記憶體\n"
+" Vsize: %-10s\n"
+" RSS: %-10s\t\t RSS é™åˆ¶ï¼š%s\n"
+" 程å¼é–‹å§‹ï¼š %#-10lx\t\t 程å¼åœæ­¢ï¼š %#-10lx\n"
+" 堆疊開始: %#-10lx\n"
+" 堆疊指標 (ESP):%#10lx\t 指令指標 (EIP):%#10lx\n"
+
+#: src/prtstat.c:199
+#, c-format
+msgid ""
+"Scheduling\n"
+" Policy: %s\n"
+" Nice: %ld \t\t RT Priority: %ld %s\n"
+msgstr ""
+"排程\n"
+" 策略:%s\n"
+" å–„æ„:%ld \t\t RT 優先權:%ld %s\n"
+
+#: src/prtstat.c:220
+msgid "asprintf in print_stat failed.\n"
+msgstr "print_stat 中的 asprintf 失敗。\n"
+
+#: src/prtstat.c:225
+#, c-format
+msgid "Process with pid %d does not exist.\n"
+msgstr "具有 pid %d 的行程ä¸å­˜åœ¨ã€‚\n"
+
+#: src/prtstat.c:227
+#, c-format
+msgid "Unable to open stat file for pid %d (%s)\n"
+msgstr "無法開啟 pid %d (%s) 的 stat 檔案\n"
+
+#: src/prtstat.c:243
+#, c-format
+msgid "Unable to allocate memory for proc_info\n"
+msgstr "ç„¡æ³•å° proc_info 分é…記憶體\n"
+
+#: src/prtstat.c:283
+#, c-format
+msgid "Unable to scan stat file"
+msgstr "無法掃æ stat 檔案"
+
+#: src/prtstat.c:318
+msgid "Invalid option"
+msgstr "無效的é¸é …"
+
+#: src/prtstat.c:323
+msgid "You must provide at least one PID."
+msgstr "您必須æ供至少一個 PID。"
+
+#: src/prtstat.c:327
+#, c-format
+msgid "/proc is not mounted, cannot stat /proc/self/stat.\n"
+msgstr "/proc 未被掛載,無法å–å¾— /proc/self/stat 的狀態。\n"
+
+#: src/pstree.c:1254
+#, c-format
+msgid "%s is empty (not mounted ?)\n"
+msgstr "%s 是空的 (尚未掛載?)\n"
+
+#: src/pstree.c:1287
+#, c-format
+msgid ""
+"Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+" [ -A | -G | -U ] [ PID | USER ]\n"
+" or: pstree -V\n"
+msgstr ""
+"用法: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N 類型 ]\n"
+" [ -A | -G | -U ] [ PID | 使用者 ]\n"
+" 或: pstree -V\n"
+
+#: src/pstree.c:1291
+#, c-format
+msgid ""
+"\n"
+"Display a tree of processes.\n"
+"\n"
+msgstr ""
+"\n"
+"顯示行程的樹狀圖。\n"
+"\n"
+
+#: src/pstree.c:1294
+#, c-format
+msgid ""
+" -a, --arguments show command line arguments\n"
+" -A, --ascii use ASCII line drawing characters\n"
+" -c, --compact-not don't compact identical subtrees\n"
+msgstr ""
+" -a, --arguments 顯示指令列åƒæ•¸\n"
+" -A, --ascii 使用 ASCII 行繪製字元\n"
+" -c, --compact-not ä¸åˆä½µå®Œå…¨ç›¸åŒçš„å­æ¨¹\n"
+
+#: src/pstree.c:1298
+#, c-format
+msgid ""
+" -C, --color=TYPE color process by attribute\n"
+" (age)\n"
+msgstr " -C, --color=é¡žåž‹ ä¾å±¬æ€§ (age) 為行程上色\n"
+
+#: src/pstree.c:1301
+#, c-format
+msgid ""
+" -g, --show-pgids show process group ids; implies -c\n"
+" -G, --vt100 use VT100 line drawing characters\n"
+msgstr ""
+" -g, --show-pgids 顯示行程的群組 IDï¼›éš±å« -c\n"
+" -G, --vt100 使用 VT100 行繪製字元\n"
+
+#: src/pstree.c:1304
+#, c-format
+msgid ""
+" -h, --highlight-all highlight current process and its ancestors\n"
+" -H PID, --highlight-pid=PID\n"
+" highlight this process and its ancestors\n"
+" -l, --long don't truncate long lines\n"
+msgstr ""
+" -h, --highlight-all 標示目å‰åŠä¸Šç´šè¡Œç¨‹\n"
+" -H PID, --highlight-pid=PID\n"
+" 標示這個åŠä¸Šç´šè¡Œç¨‹\n"
+" -l, --long ä¸æˆªçŸ­é•·è¡Œ\n"
+
+#: src/pstree.c:1309
+#, c-format
+msgid ""
+" -n, --numeric-sort sort output by PID\n"
+" -N TYPE, --ns-sort=TYPE\n"
+" sort output by this namespace type\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids show PIDs; implies -c\n"
+msgstr ""
+" -n, --numeric-sort ä¾ PID 排åºè¼¸å‡º\n"
+" -N é¡žåž‹, --ns-sort=é¡žåž‹\n"
+" ä¾æ­¤å‘½å空間類型排åºè¼¸å‡º\n"
+" (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+" -p, --show-pids 顯示 PIDï¼›éš±å« -c\n"
+
+#: src/pstree.c:1315
+#, c-format
+msgid ""
+" -s, --show-parents show parents of the selected process\n"
+" -S, --ns-changes show namespace transitions\n"
+" -t, --thread-names show full thread names\n"
+" -T, --hide-threads hide threads, show only processes\n"
+msgstr ""
+" -s, --show-parents 顯示é¸å–行程的上級\n"
+" -S, --ns-changes 顯示命å空間轉æ›\n"
+" -t, --thread-names 顯示完整執行緒å稱\n"
+" -T, --hide-threads éš±è—執行緒,åªé¡¯ç¤ºè¡Œç¨‹\n"
+
+#: src/pstree.c:1320
+#, c-format
+msgid ""
+" -u, --uid-changes show uid transitions\n"
+" -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+" -V, --version display version information\n"
+msgstr ""
+" -u, --uid-changes 顯示使用者 ID (UID) 轉æ›\n"
+" -U, --unicode 使用 UTF-8 (Unicode) 行繪製字元\n"
+" -V, --version 顯示版本資訊\n"
+
+#: src/pstree.c:1324
+#, c-format
+msgid ""
+" -Z, --security-context\n"
+" show security attributes\n"
+msgstr ""
+" -Z, --security-context\n"
+" 顯示安全屬性\n"
+
+#: src/pstree.c:1326
+#, c-format
+msgid ""
+"\n"
+" PID start at this PID; default is 1 (init)\n"
+" USER show only trees rooted at processes of this user\n"
+"\n"
+msgstr ""
+"\n"
+" PID 從這個 PID 開始;é è¨­æ˜¯ 1 (init)\n"
+" 使用者 åªé¡¯ç¤ºæºè‡ªæ­¤ä½¿ç”¨è€…行程的樹狀çµæ§‹\n"
+"\n"
+
+#: src/pstree.c:1334
+#, c-format
+msgid "pstree (PSmisc) %s\n"
+msgstr "pstree (PSmisc) %s\n"
+
+#: src/pstree.c:1455
+#, c-format
+msgid "TERM is not set\n"
+msgstr "TERM 尚未設定\n"
+
+#: src/pstree.c:1459
+#, c-format
+msgid "Can't get terminal capabilities\n"
+msgstr "無法å–得終端機功能\n"
+
+#: src/pstree.c:1477
+#, c-format
+msgid "procfs file for %s namespace not available\n"
+msgstr "無法使用 procfs 檔案於 %s 命å空間\n"
+
+#: src/pstree.c:1523
+#, c-format
+msgid "No such user name: %s\n"
+msgstr "無此類使用者å稱:%s\n"
+
+#: src/pstree.c:1539
+#, c-format
+msgid "Process %d not found.\n"
+msgstr "找ä¸åˆ°è¡Œç¨‹ %d。\n"
+
+#: src/pstree.c:1555
+#, c-format
+msgid "No processes found.\n"
+msgstr "找ä¸åˆ°ä»»ä½•è¡Œç¨‹ã€‚\n"
+
+#: src/pstree.c:1563
+#, c-format
+msgid "Press return to close\n"
+msgstr "按下輸入éµä»¥é—œé–‰\n"
+
+#: src/signals.c:84
+#, c-format
+msgid "%s: unknown signal; %s -l lists signals.\n"
+msgstr "%s: ä¸æ˜Žçš„信號;%s -l 列出信號。\n"
+
+#, c-format
+#~ msgid ""
+#~ "Copyright (C) 1993-2021 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "著作權所有 © 1993-2021 Werner Almesberger 和 Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: killall [ -Z CONTEXT ] [ -u USER ] [ -y TIME ] [ -o TIME ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] NAME...\n"
+#~ msgstr ""
+#~ "用法:killall [ -Z 上下文 ] [ -u 使用者 ] [ -y 時間 ] [ -o 時間 ] [ -"
+#~ "eIgiqrvw ]\n"
+#~ " [ -s SIGNAL | -SIGNAL ] å稱...\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " or: pstree -V\n"
+#~ msgstr ""
+#~ "用法: pstree [-acglpsStTu] [ -h | -H PID ] [ -n | -N 類型 ]\n"
+#~ " [ -A | -G | -U ] [ PID | 使用者 ]\n"
+#~ " 或: pstree -V\n"
+
+#~ msgid ""
+#~ "Copyright (C) 1993-2019 Werner Almesberger and Craig Small\n"
+#~ "\n"
+#~ msgstr ""
+#~ "著作權 © 1993-2019 Werner Almesberger 和 Craig Small\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ "Usage: pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N type ]\n"
+#~ " [ -A | -G | -U ] [ PID | USER ]\n"
+#~ " pstree -V\n"
+#~ "Display a tree of processes.\n"
+#~ "\n"
+#~ " -a, --arguments show command line arguments\n"
+#~ " -A, --ascii use ASCII line drawing characters\n"
+#~ " -c, --compact don't compact identical subtrees\n"
+#~ " -h, --highlight-all highlight current process and its ancestors\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID highlight this process and its ancestors\n"
+#~ " -g, --show-pgids show process group ids; implies -c\n"
+#~ " -G, --vt100 use VT100 line drawing characters\n"
+#~ " -l, --long don't truncate long lines\n"
+#~ " -n, --numeric-sort sort output by PID\n"
+#~ " -N type,\n"
+#~ " --ns-sort=type sort by namespace type (cgroup, ipc, mnt, net, "
+#~ "pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids show PIDs; implies -c\n"
+#~ " -s, --show-parents show parents of the selected process\n"
+#~ " -S, --ns-changes show namespace transitions\n"
+#~ " -t, --thread-names show full thread names\n"
+#~ " -T, --hide-threads hide threads, show only processes\n"
+#~ " -u, --uid-changes show uid transitions\n"
+#~ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+#~ " -V, --version display version information\n"
+#~ msgstr ""
+#~ "用法:pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N 類型 ]\n"
+#~ "用法:pstree [-acglpsStu] [ -h | -H PID ] [ -n | -N 類型 ]\n"
+#~ " [ -A | -G | -U ] [ PID | 使用者 ]\n"
+#~ " pstree -V\n"
+#~ "顯示執行程åºçš„樹狀圖。\n"
+#~ "\n"
+#~ " -a, --arguments 顯示命令列引數\n"
+#~ " -A, --ascii 使用 ASCII ç·šæ¢ç¹ªè£½å­—å…ƒ\n"
+#~ " -c, --compact ä¸å£“縮相åŒçš„å­æ¨¹\n"
+#~ " -h, --highlight-all 標示目å‰è¡Œç¨‹å’Œå®ƒçš„原始節點\n"
+#~ " -H PID,\n"
+#~ " --highlight-pid=PID 標示這個行程和它的原始節點\n"
+#~ " -g, --show-pgids 顯示行程群組識別號;æ„味著 -c\n"
+#~ " -G, --vt100 使用 VT100 ç·šæ¢ç¹ªè£½å­—å…ƒ\n"
+#~ " -l, --long ä¸æˆªæ–·é•·åˆ—\n"
+#~ " -n, --numeric-sort ä¾ç…§ PID 排åºè¼¸å‡º\n"
+#~ " -N é¡žåž‹,\n"
+#~ " --ns-sort=é¡žåž‹ ä¾ç…§å‘½åç©ºé–“é¡žåž‹æŽ’åº (cgroup, ipc, mnt, net, pid,\n"
+#~ " user, uts)\n"
+#~ " -p, --show-pids 顯示 PIDsï¼›éš±å« -c\n"
+#~ " -s, --show-parents 顯示已é¸è¡Œç¨‹çš„上層\n"
+#~ " -S, --ns-changes 顯示命å空間轉æ›\n"
+#~ " -t, --thread-names 顯示完整的執行緒å稱\n"
+#~ " -T, --hide-threads éš±è—執行緒,åªé¡¯ç¤ºåŸ·è¡Œç¨‹åº\n"
+#~ " -u, --uid-changes 顯示 uid 轉æ›\n"
+#~ " -U, --unicode 使用 UTF-8 (è¬åœ‹ç¢¼) ç·šæ¢ç¹ªè£½å­—å…ƒ\n"
+#~ " -V, --version 顯示版本資訊\n"
diff --git a/src/comm.h b/src/comm.h
new file mode 100644
index 0000000..d08e538
--- /dev/null
+++ b/src/comm.h
@@ -0,0 +1,42 @@
+/*
+ * comm.h - command name length definition
+ *
+ * Copyright 1995 Werner Almesberger
+ * Copyright 2012-2024 Craig Small <csmall@dropbear.xyz>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef COMM_H
+#define COMM_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/*
+ * COMM_LEN should be the same size as TASK_COMM_LEN in the Linux source
+ * at include/linux/sched.h
+ */
+#define COMM_LEN 64
+
+/*
+ * Older kernels had only 16 characters, which means we may have to check this
+ * too
+ */
+#define OLD_COMM_LEN 16
+
+#endif
diff --git a/src/fuser.c b/src/fuser.c
new file mode 100644
index 0000000..0c14128
--- /dev/null
+++ b/src/fuser.c
@@ -0,0 +1,2237 @@
+/*
+ * fuser.c - identify processes using files
+ *
+ * Based on fuser.c Copyright (C) 1993-2005 Werner Almesberger and Craig Small
+ *
+ * Completely re-written
+ * Copyright (C) 2005-2024 Craig Small <csmall@dropbear.xyz>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/sysmacros.h>
+#include <sys/wait.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <pwd.h>
+#include <netdb.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <mntent.h>
+#include <signal.h>
+#include <getopt.h>
+#include <setjmp.h>
+#include <limits.h>
+/* MAXSYMLINKS is a BSDism. If it doesn't exist, fall back to SYMLINK_MAX,
+ which is the POSIX name. */
+#ifndef MAXSYMLINKS
+#define MAXSYMLINKS SYMLINK_MAX
+#endif
+
+#ifdef ENABLE_NLS
+#include <locale.h>
+#endif
+
+#include "fuser.h"
+#include "signals.h"
+#include "i18n.h"
+#include "statx.h"
+#include "comm.h"
+
+//#define DEBUG 1
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif /* PATH_MAX */
+
+#define NAME_FIELD 20 /* space reserved for file name */
+/* Function defines */
+static void add_matched_proc(struct names *name_list, const pid_t pid,
+ const uid_t uid, const char access);
+static void add_special_proc(struct names *name_list, const char ptype,
+ const uid_t uid, const char *command);
+static void check_dir(const pid_t pid, const char *dirname,
+ struct device_list *dev_head,
+ struct inode_list *ino_head, const uid_t uid,
+ const char access, struct unixsocket_list *sockets,
+ dev_t netdev);
+static void check_map(const pid_t pid, const char *filename,
+ struct device_list *dev_head,
+ struct inode_list *ino_head, const uid_t uid,
+ const char access);
+static struct stat *get_pidstat(const pid_t pid, const char *filename);
+static uid_t getpiduid(const pid_t pid);
+static int print_matches(struct names *names_head, const opt_type opts,
+ const int sig_number);
+static int kill_matched_proc(struct procs *pptr, const opt_type opts,
+ const int sig_number);
+
+/*int parse_mount(struct names *this_name, struct device_list **dev_list);*/
+static void add_device(struct device_list **dev_list,
+ struct names *this_name, dev_t device);
+void fill_unix_cache(struct unixsocket_list **unixsocket_head);
+void clear_unix_cache(struct unixsocket_list **unixsocket_head);
+static void atexit_clear_unix_cache();
+static dev_t find_net_dev(void);
+static void scan_procs(
+ struct names *names_head, struct inode_list *ino_head,
+ struct device_list *dev_head,
+ struct unixsocket_list *sockets, dev_t netdev);
+static void scan_knfsd(
+ struct names *names_head, struct inode_list *ino_head,
+ struct device_list *dev_head);
+static void scan_mounts(
+ struct names *names_head,
+ struct inode_list *ino_head,
+ struct device_list *dev_head);
+static void scan_swaps(
+ struct names *names_head,
+ struct inode_list *ino_head,
+ struct device_list *dev_head);
+#ifdef DEBUG
+static void debug_match_lists(
+ struct names *names_head,
+ struct inode_list *ino_head,
+ struct device_list *dev_head);
+#endif
+
+static char *expandpath(const char *path);
+static struct unixsocket_list *unixsockets = NULL;
+static struct names *names_head = NULL, *names_tail = NULL;
+static struct ip_connections *tcp_connection_list = NULL;
+static struct ip_connections *udp_connection_list = NULL;
+#ifdef WITH_IPV6
+static struct ip6_connections *tcp6_connection_list = NULL;
+static struct ip6_connections *udp6_connection_list = NULL;
+#endif
+static struct device_list *match_devices = NULL;
+static struct inode_list *match_inodes = NULL;
+
+static void usage(
+ const char *errormsg)
+{
+ if (errormsg != NULL)
+ fprintf(stderr, "%s\n", errormsg);
+
+ fprintf(stderr,
+ _
+ ("Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]\n"
+ " [-k [-i] [-SIGNAL]] NAME...\n"
+ " fuser -l\n"
+ " fuser -V\n"
+ "Show which processes use the named files, sockets, or filesystems.\n\n"
+ " -a,--all display unused files too\n"
+ " -i,--interactive ask before killing (ignored without -k)\n"
+ " -I,--inode use always inodes to compare files\n"
+ " -k,--kill kill processes accessing the named file\n"
+ " -l,--list-signals list available signal names\n"
+ " -m,--mount show all processes using the named filesystems or\n"
+ " block device\n"
+ " -M,--ismountpoint fulfill request only if NAME is a mount point\n"
+ " -n,--namespace SPACE search in this name space (file, udp, or tcp)\n"
+ " -s,--silent silent operation\n"
+ " -SIGNAL send this signal instead of SIGKILL\n"
+ " -u,--user display user IDs\n"
+ " -v,--verbose verbose output\n"
+ " -w,--writeonly kill only processes with write access\n"
+ " -V,--version display version information\n"));
+#ifdef WITH_IPV6
+ fprintf(stderr, _(" -4,--ipv4 search IPv4 sockets only\n"
+ " -6,--ipv6 search IPv6 sockets only\n"));
+#endif
+ fprintf(stderr, _(" udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n\n"));
+ exit(1);
+}
+
+void print_version()
+{
+ fprintf(stderr, _("fuser (PSmisc) %s\n"), VERSION);
+ fprintf(stderr,
+ _("Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n\n"));
+ fprintf(stderr,
+ _("PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+ "This is free software, and you are welcome to redistribute it under\n"
+ "the terms of the GNU General Public License.\n"
+ "For more information about these matters, see the files named COPYING.\n"));
+}
+
+static void scan_procs(
+ struct names *names_head, struct inode_list *ino_head,
+ struct device_list *dev_head, struct unixsocket_list *sockets,
+ dev_t netdev)
+{
+ DIR *topproc_dir;
+ struct dirent *topproc_dent;
+ struct inode_list *ino_tmp;
+ struct device_list *dev_tmp;
+ pid_t pid, my_pid;
+ uid_t uid;
+
+ if ( (ino_head == NULL) && (dev_head == NULL) )
+ return;
+
+ if ((topproc_dir = opendir("/proc")) == NULL) {
+ fprintf(stderr, _("Cannot open /proc directory: %s\n"),
+ strerror(errno));
+ exit(1);
+ }
+ my_pid = getpid();
+ while ((topproc_dent = readdir(topproc_dir)) != NULL) {
+ dev_t cwd_dev, exe_dev, root_dev;
+ struct stat *cwd_stat = NULL;
+ struct stat *exe_stat = NULL;
+ struct stat *root_stat = NULL;
+
+ if (topproc_dent->d_name[0] < '0' || topproc_dent->d_name[0] > '9') /* Not a process */
+ continue;
+ pid = atoi(topproc_dent->d_name);
+ /* Dont print myself */
+ if (pid == my_pid)
+ continue;
+ uid = getpiduid(pid);
+
+ cwd_stat = get_pidstat(pid, "cwd");
+ exe_stat = get_pidstat(pid, "exe");
+ root_stat = get_pidstat(pid, "root");
+ cwd_dev = cwd_stat ? cwd_stat->st_dev : 0;
+ exe_dev = exe_stat ? exe_stat->st_dev : 0;
+ root_dev = root_stat ? root_stat->st_dev : 0;
+
+ /* Scan the devices */
+ for (dev_tmp = dev_head; dev_tmp != NULL;
+ dev_tmp = dev_tmp->next) {
+ if (exe_dev == dev_tmp->device)
+ add_matched_proc(dev_tmp->name, pid, uid,
+ ACCESS_EXE);
+ if (root_dev == dev_tmp->device)
+ add_matched_proc(dev_tmp->name, pid, uid,
+ ACCESS_ROOT);
+ if (cwd_dev == dev_tmp->device)
+ add_matched_proc(dev_tmp->name, pid, uid,
+ ACCESS_CWD);
+ }
+ for (ino_tmp = ino_head; ino_tmp != NULL;
+ ino_tmp = ino_tmp->next) {
+ if (exe_dev == ino_tmp->device) {
+ if (!exe_stat)
+ exe_stat = get_pidstat(pid, "exe");
+ if (exe_stat
+ && exe_stat->st_dev == ino_tmp->device
+ && exe_stat->st_ino == ino_tmp->inode)
+ add_matched_proc(ino_tmp->name, pid,
+ uid, ACCESS_EXE);
+ }
+ if (root_dev == ino_tmp->device) {
+ if (!root_stat)
+ root_stat = get_pidstat(pid, "root");
+ if (root_stat
+ && root_stat->st_dev == ino_tmp->device
+ && root_stat->st_ino == ino_tmp->inode)
+ add_matched_proc(ino_tmp->name, pid,
+ uid, ACCESS_ROOT);
+ }
+ if (cwd_dev == ino_tmp->device) {
+ if (!cwd_stat)
+ cwd_stat = get_pidstat(pid, "cwd");
+ if (cwd_stat
+ && cwd_stat->st_dev == ino_tmp->device
+ && cwd_stat->st_ino == ino_tmp->inode)
+ add_matched_proc(ino_tmp->name, pid,
+ uid, ACCESS_CWD);
+ }
+ }
+ if (root_stat)
+ free(root_stat);
+ if (cwd_stat)
+ free(cwd_stat);
+ if (exe_stat)
+ free(exe_stat);
+#if !defined (__linux__) && !defined (__CYGWIN__)
+ check_dir(pid, "lib", dev_head, ino_head, uid, ACCESS_MMAP,
+ sockets, netdev);
+ check_dir(pid, "mmap", dev_head, ino_head, uid, ACCESS_MMAP,
+ sockets, netdev);
+#endif
+ check_dir(pid, "fd", dev_head, ino_head, uid, ACCESS_FILE,
+ sockets, netdev);
+ check_map(pid, "maps", dev_head, ino_head, uid, ACCESS_MMAP);
+
+ } /* while topproc_dent */
+ closedir(topproc_dir);
+}
+
+static void add_inode(
+ struct inode_list **ino_list,
+ struct names *this_name,
+ dev_t device, ino_t inode)
+{
+ struct inode_list *ino_tmp, *ino_head;
+
+ if ((ino_tmp =
+ (struct inode_list *)malloc(sizeof(struct inode_list))) == NULL)
+ return;
+ ino_head = *ino_list;
+ ino_tmp->name = this_name;
+ ino_tmp->device = device;
+ ino_tmp->inode = inode;
+ ino_tmp->next = ino_head;
+ *ino_list = ino_tmp;
+}
+
+static void add_device(
+ struct device_list **dev_list,
+ struct names *this_name,
+ dev_t device)
+{
+ struct device_list *dev_tmp, *dev_head;
+#ifdef DEBUG
+ fprintf(stderr, "add_device(%s %u\n", this_name->filename,
+ (unsigned int)device);
+#endif /* DEBUG */
+
+ if ((dev_tmp =
+ (struct device_list *)malloc(sizeof(struct device_list))) == NULL)
+ return;
+ dev_head = *dev_list;
+ dev_tmp->name = this_name;
+ dev_tmp->device = device;
+ dev_tmp->next = dev_head;
+ *dev_list = dev_tmp;
+}
+
+static void add_ip_conn(
+ struct ip_connections **ip_list, const char *protocol,
+ struct names *this_name, const int lcl_port, const int rmt_port,
+ unsigned long rmt_address)
+{
+ struct ip_connections *ip_tmp, *ip_head;
+
+ if ((ip_tmp =
+ (struct ip_connections *)malloc(sizeof(struct ip_connections))) ==
+ NULL)
+ return;
+ ip_head = *ip_list;
+ ip_tmp->name = this_name;
+ ip_tmp->lcl_port = lcl_port;
+ ip_tmp->rmt_port = rmt_port;
+ ip_tmp->rmt_address.s_addr = rmt_address;
+ ip_tmp->next = ip_head;
+
+ *ip_list = ip_tmp;
+}
+
+#ifdef WITH_IPV6
+static void add_ip6_conn(
+ struct ip6_connections **ip_list,
+ const char *protocol,
+ struct names *this_name,
+ const int lcl_port,
+ const int rmt_port,
+ struct in6_addr rmt_address)
+{
+ struct ip6_connections *ip_tmp, *ip_head;
+
+ if ((ip_tmp =
+ (struct ip6_connections *)malloc(sizeof(struct ip6_connections)))
+ == NULL)
+ return;
+ ip_head = *ip_list;
+ ip_tmp->name = this_name;
+ ip_tmp->lcl_port = lcl_port;
+ ip_tmp->rmt_port = rmt_port;
+ memcpy(&(ip_tmp->rmt_address), &(rmt_address), sizeof(struct in6_addr));
+ ip_tmp->next = ip_head;
+
+ *ip_list = ip_tmp;
+}
+#endif
+
+/* Adds a normal process only */
+static void add_matched_proc(
+ struct names *name_list,
+ const pid_t pid,
+ const uid_t uid,
+ const char access)
+{
+ struct procs *pptr, *last_proc;
+ char *pathname;
+ char cmdname[101], *cptr;
+ int cmdlen;
+ FILE *fp;
+
+ last_proc = NULL;
+ for (pptr = name_list->matched_procs; pptr != NULL; pptr = pptr->next)
+ {
+ last_proc = pptr;
+ if (pptr->pid == pid)
+ {
+ pptr->access |= access;
+ return;
+ }
+ }
+ /* Not found */
+ if ((pptr = (struct procs *)malloc(sizeof(struct procs))) == NULL)
+ {
+ fprintf(stderr,
+ _("Cannot allocate memory for matched proc: %s\n"),
+ strerror(errno));
+ return;
+ }
+ pptr->pid = pid;
+ pptr->uid = uid;
+ pptr->access = access;
+ pptr->proc_type = PTYPE_NORMAL;
+ pptr->next = NULL;
+ /* set command name */
+ pptr->command = NULL;
+
+ fp = NULL;
+ pathname = NULL;
+ if ((asprintf(&pathname, "/proc/%d/stat", pid) > 0) &&
+ ((fp = fopen(pathname, "r")) != NULL) &&
+ (fscanf(fp, "%*d (%100[^)]", cmdname) == 1))
+ if ((pptr->command = (char *)malloc(COMM_LEN + 1)) != NULL)
+ {
+ cmdlen = 0;
+ for (cptr = cmdname; cmdlen < COMM_LEN && *cptr;
+ cptr++)
+ {
+ if (isprint(*cptr))
+ pptr->command[cmdlen++] = *cptr;
+ else if (cmdlen < (COMM_LEN - 4))
+ cmdlen +=
+ sprintf(&(pptr->command[cmdlen]),
+ "\\%03o", *cptr);
+ }
+ pptr->command[cmdlen] = '\0';
+ }
+ if (last_proc == NULL)
+ name_list->matched_procs = pptr;
+ else
+ last_proc->next = pptr;
+ if (pathname)
+ free(pathname);
+ if (fp)
+ fclose(fp);
+}
+
+/* Adds a knfsd etc process */
+static void add_special_proc(
+ struct names *name_list,
+ const char ptype,
+ const uid_t uid,
+ const char *command)
+{
+ struct procs *pptr;
+
+ for (pptr = name_list->matched_procs; pptr != NULL; pptr = pptr->next)
+ {
+ if (pptr->proc_type == ptype)
+ return;
+ }
+ if ((pptr = malloc(sizeof(struct procs))) == NULL)
+ {
+ fprintf(stderr,
+ _("Cannot allocate memory for matched proc: %s\n"),
+ strerror(errno));
+ return;
+ }
+ pptr->pid = 0;
+ pptr->uid = uid;
+ pptr->access = 0;
+ pptr->proc_type = ptype;
+ /* Append the special processes */
+ pptr->next = name_list->matched_procs;
+ name_list->matched_procs = pptr;
+ /* set command name */
+ pptr->command = strdup(command);
+}
+
+int parse_file(
+ struct names *this_name,
+ struct inode_list **ino_list,
+ const opt_type opts)
+{
+ char *new = expandpath(this_name->filename);
+ if (new)
+ {
+ if (this_name->filename)
+ free(this_name->filename);
+ this_name->filename = strdup(new);
+ }
+ if (statn(this_name->filename, STATX_INO|STATX_TYPE, &(this_name->st)) != 0 )
+ {
+ if (errno == ENOENT)
+ fprintf(stderr,
+ _("Specified filename %s does not exist.\n"),
+ this_name->filename);
+ else
+ fprintf(stderr, _("Cannot stat %s: %s\n"),
+ this_name->filename, strerror(errno));
+ return -1;
+ }
+#ifdef DEBUG
+ printf("adding file %s %lX %lX\n", this_name->filename,
+ (unsigned long)this_name->st.st_dev,
+ (unsigned long)this_name->st.st_ino);
+#endif /* DEBUG */
+ add_inode(ino_list, this_name, this_name->st.st_dev,
+ this_name->st.st_ino);
+ return 0;
+}
+
+int parse_unixsockets(
+ struct names *this_name,
+ struct inode_list **ino_list,
+ struct unixsocket_list *sun_head)
+{
+ struct unixsocket_list *sun_tmp;
+ dev_t net_dev;
+
+ net_dev = find_net_dev();
+
+ for (sun_tmp = sun_head; sun_tmp != NULL; sun_tmp = sun_tmp->next)
+ {
+ if (sun_tmp->dev == this_name->st.st_dev
+ && sun_tmp->inode == this_name->st.st_ino)
+ {
+ add_inode(ino_list, this_name, net_dev,
+ sun_tmp->net_inode);
+ return 0;
+ }
+ }
+ return 0;
+}
+
+int parse_mounts(
+ struct names *this_name,
+ struct device_list **dev_list,
+ const opt_type opts)
+{
+ dev_t match_device;
+
+ if (S_ISBLK(this_name->st.st_mode))
+ match_device = this_name->st.st_rdev;
+ else
+ match_device = this_name->st.st_dev;
+ add_device(dev_list, this_name, match_device);
+ return 0;
+}
+
+#ifdef WITH_IPV6
+int parse_inet(
+ struct names *this_name,
+ const int ipv4_only,
+ const int ipv6_only,
+ struct ip_connections **ip_list,
+ struct ip6_connections **ip6_list)
+#else
+int parse_inet(
+ struct names *this_name,
+ struct ip_connections **ip_list)
+#endif
+{
+ struct addrinfo *res, *resptr;
+ struct addrinfo hints;
+ int errcode;
+ char *lcl_port_str, *rmt_addr_str, *rmt_port_str, *tmpstr, *tmpstr2;
+ in_port_t lcl_port;
+ struct sockaddr_in *sin;
+#ifdef WITH_IPV6
+ struct sockaddr_in6 *sin6;
+#endif
+ char hostspec[100];
+ char *protocol;
+ int i;
+
+ if ((protocol = strchr(this_name->filename, '/')) == NULL)
+ return -1;
+ protocol++;
+ if (protocol[0] == '\0')
+ return -1;
+ for (i = 0;
+ i < 99 && this_name->filename[i] != '\0'
+ && this_name->filename[i] != '/'; i++)
+ hostspec[i] = this_name->filename[i];
+ hostspec[i] = '\0';
+
+ lcl_port_str = rmt_addr_str = rmt_port_str = NULL;
+ /* Split out the names */
+ if ((tmpstr = strchr(hostspec, ',')) == NULL)
+ {
+ /* Single option */
+ lcl_port_str = strdup(hostspec);
+ } else {
+ if (tmpstr == hostspec)
+ lcl_port_str = NULL;
+ else {
+ *tmpstr = '\0';
+ lcl_port_str = strdup(hostspec);
+ }
+ tmpstr++;
+ if (*tmpstr != '\0') {
+ if ((tmpstr2 = strchr(tmpstr, ',')) == NULL)
+ {
+ /* Only 2 options */
+ rmt_addr_str = tmpstr;
+ } else {
+ if (tmpstr2 == tmpstr)
+ rmt_addr_str = NULL;
+ else {
+ rmt_addr_str = tmpstr;
+ *tmpstr2 = '\0';
+ }
+ tmpstr2++;
+ if (*tmpstr2 != '\0')
+ rmt_port_str = tmpstr2;
+ }
+ }
+ }
+#ifdef DEBUG
+ printf("parsed to lp %s rh %s rp %s\n", lcl_port_str, rmt_addr_str,
+ rmt_port_str);
+#endif
+
+ memset(&hints, 0, sizeof(hints));
+#ifdef WITH_IPV6
+ if (ipv6_only)
+ {
+ hints.ai_family = PF_INET6;
+ } else if (ipv4_only)
+ {
+ hints.ai_family = PF_INET;
+ } else
+ hints.ai_family = PF_UNSPEC;
+#else
+ hints.ai_family = PF_INET;
+#endif
+ if (strcmp(protocol, "tcp") == 0)
+ hints.ai_socktype = SOCK_STREAM;
+ else
+ hints.ai_socktype = SOCK_DGRAM;
+
+ if (lcl_port_str == NULL)
+ {
+ lcl_port = 0;
+ } else {
+ /* Resolve local port first */
+ if ((errcode =
+ getaddrinfo(NULL, lcl_port_str, &hints, &res)) != 0)
+ {
+ fprintf(stderr, _("Cannot resolve local port %s: %s\n"),
+ lcl_port_str, gai_strerror(errcode));
+ free(lcl_port_str);
+ return -1;
+ }
+ free(lcl_port_str);
+ if (res == NULL)
+ return -1;
+ switch (res->ai_family)
+ {
+ case AF_INET:
+ lcl_port =
+ ((struct sockaddr_in *)(res->ai_addr))->sin_port;
+ break;
+#ifdef WITH_IPV6
+ case AF_INET6:
+ lcl_port =
+ ((struct sockaddr_in6 *)(res->ai_addr))->sin6_port;
+ break;
+#endif
+ default:
+ fprintf(stderr, _("Unknown local port AF %d\n"),
+ res->ai_family);
+ freeaddrinfo(res);
+ return -1;
+ }
+ freeaddrinfo(res);
+ }
+ res = NULL;
+ if (rmt_addr_str == NULL && rmt_port_str == NULL)
+ {
+ add_ip_conn(ip_list, protocol, this_name, ntohs(lcl_port), 0,
+ INADDR_ANY);
+#ifdef WITH_IPV6
+ add_ip6_conn(ip6_list, protocol, this_name, ntohs(lcl_port), 0,
+ in6addr_any);
+#endif
+ return 0;
+ } else {
+ /* Resolve remote address and port */
+ if (getaddrinfo(rmt_addr_str, rmt_port_str, &hints, &res) == 0)
+ {
+ for (resptr = res; resptr != NULL;
+ resptr = resptr->ai_next)
+ {
+ switch (resptr->ai_family)
+ {
+ case AF_INET:
+ sin = (struct sockaddr_in *)
+ resptr->ai_addr;
+ if (rmt_addr_str == NULL)
+ {
+ add_ip_conn(ip_list, protocol, this_name,
+ ntohs(lcl_port), ntohs(sin->sin_port),
+ INADDR_ANY);
+ } else {
+ add_ip_conn(ip_list, protocol, this_name,
+ ntohs(lcl_port), ntohs(sin->sin_port),
+ sin->sin_addr.s_addr);
+ }
+ break;
+#ifdef WITH_IPV6
+ case AF_INET6:
+ sin6 = (struct sockaddr_in6 *) resptr->ai_addr;
+ if (rmt_addr_str == NULL)
+ {
+ add_ip6_conn(ip6_list, protocol, this_name,
+ ntohs(lcl_port), ntohs(sin6->sin6_port),
+ in6addr_any);
+ } else {
+ add_ip6_conn(ip6_list, protocol, this_name,
+ ntohs(lcl_port), ntohs(sin6->sin6_port),
+ sin6->sin6_addr);
+ }
+ break;
+#endif
+ }
+ } /*while */
+ freeaddrinfo(res);
+ return 0;
+ }
+ }
+ return 1;
+}
+
+void find_net_sockets(
+ struct inode_list **ino_list,
+ struct ip_connections *conn_list,
+ const char *protocol,
+ dev_t netdev)
+{
+ FILE *fp;
+ char pathname[200], line[BUFSIZ];
+ unsigned long loc_port, rmt_port;
+ unsigned long rmt_addr;
+ unsigned long long scanned_inode;
+ ino_t inode;
+ struct ip_connections *conn_tmp;
+
+ if (snprintf(pathname, 200, "/proc/net/%s", protocol) < 0)
+ return;
+
+ if ((fp = fopen(pathname, "r")) == NULL)
+ {
+ fprintf(stderr, _("Cannot open protocol file \"%s\": %s\n"),
+ pathname, strerror(errno));
+ return;
+ }
+ while (fgets(line, BUFSIZ, fp) != NULL)
+ {
+ if (sscanf
+ (line,
+ "%*u: %*x:%lx %08lx:%lx %*x %*x:%*x %*x:%*x %*x %*d %*d %llu",
+ &loc_port, &rmt_addr, &rmt_port, &scanned_inode) != 4)
+ continue;
+#ifdef DEBUG
+ printf("Found IPv4 *:%lu with %s:%lu\n", loc_port,
+ inet_ntoa(*((struct in_addr *)&rmt_addr)), rmt_port);
+#endif /* DEBUG */
+ inode = scanned_inode;
+ for (conn_tmp = conn_list; conn_tmp != NULL;
+ conn_tmp = conn_tmp->next)
+ {
+#ifdef DEBUG
+ printf(" Comparing with *.%lu %s:%lu\n",
+ conn_tmp->lcl_port,
+ inet_ntoa(conn_tmp->rmt_address),
+ conn_tmp->rmt_port);
+#endif
+ if ((conn_tmp->lcl_port == 0
+ || conn_tmp->lcl_port == loc_port)
+ && (conn_tmp->rmt_port == 0
+ || conn_tmp->rmt_port == rmt_port)
+ && (conn_tmp->rmt_address.s_addr == INADDR_ANY
+ ||
+ (memcmp
+ (&(conn_tmp->rmt_address), &(rmt_addr),
+ 4) == 0)))
+ {
+ /* add inode to list */
+#ifdef DEBUG
+ printf("Added inode!\n");
+#endif /* DEBUG */
+ add_inode(ino_list, conn_tmp->name, netdev, inode);
+ }
+ }
+
+ }
+ fclose(fp);
+}
+
+#ifdef WITH_IPV6
+void find_net6_sockets(
+ struct inode_list **ino_list,
+ struct ip6_connections *conn_list,
+ const char *protocol,
+ const dev_t netdev)
+{
+ FILE *fp;
+ char pathname[200], line[BUFSIZ];
+ unsigned long loc_port, rmt_port;
+ struct in6_addr rmt_addr;
+ unsigned int tmp_addr[4];
+ char rmt_addr6str[INET6_ADDRSTRLEN];
+ struct ip6_connections *conn_tmp;
+ unsigned long long scanned_inode;
+ ino_t inode;
+
+ if (snprintf(pathname, 200, "/proc/net/%s6", protocol) < 0)
+ return;
+
+ if ((fp = fopen(pathname, "r")) == NULL)
+ {
+#ifdef DEBUG
+ printf("Cannot open protocol file \"%s\": %s\n", pathname,
+ strerror(errno));
+#endif /* DEBUG */
+ return;
+ }
+ while (fgets(line, BUFSIZ, fp) != NULL)
+ {
+ if (sscanf
+ (line,
+ "%*u: %*x:%lx %08x%08x%08x%08x:%lx %*x %*x:%*x %*x:%*x %*x %*d %*d %llu",
+ &loc_port, &(tmp_addr[0]), &(tmp_addr[1]), &(tmp_addr[2]),
+ &(tmp_addr[3]), &rmt_port, &scanned_inode) != 7)
+ continue;
+ inode = scanned_inode;
+ rmt_addr.s6_addr32[0] = tmp_addr[0];
+ rmt_addr.s6_addr32[1] = tmp_addr[1];
+ rmt_addr.s6_addr32[2] = tmp_addr[2];
+ rmt_addr.s6_addr32[3] = tmp_addr[3];
+ inet_ntop(AF_INET6, &rmt_addr, rmt_addr6str, INET6_ADDRSTRLEN);
+#ifdef DEBUG
+ printf("Found IPv6 %ld with %s:%ld\n", loc_port, rmt_addr6str,
+ rmt_port);
+#endif /* DEBUG */
+ for (conn_tmp = conn_list; conn_tmp != NULL;
+ conn_tmp = conn_tmp->next)
+ {
+ inet_ntop(AF_INET6, &conn_tmp->rmt_address,
+ rmt_addr6str, INET6_ADDRSTRLEN);
+#ifdef DEBUG
+ printf(" Comparing with *.%lu %s:%lu ...\n",
+ conn_tmp->lcl_port, rmt_addr6str,
+ conn_tmp->rmt_port);
+#endif /* DEBUG */
+ if ((conn_tmp->lcl_port == 0
+ || conn_tmp->lcl_port == loc_port)
+ && (conn_tmp->rmt_port == 0
+ || conn_tmp->rmt_port == rmt_port)
+ &&
+ (memcmp(&(conn_tmp->rmt_address), &in6addr_any, 16)
+ == 0
+ ||
+ (memcmp(&(conn_tmp->rmt_address), &(rmt_addr), 16)
+ == 0)))
+ {
+ add_inode(ino_list, conn_tmp->name, netdev, inode);
+ }
+ }
+ }
+ fclose(fp);
+}
+#endif
+
+static void read_proc_mounts(
+ struct mount_list **mnt_list)
+{
+ FILE *fp;
+ char line[BUFSIZ];
+ char *find_mountp;
+ char *find_space;
+ struct mount_list *mnt_tmp;
+
+ if ((fp = fopen(PROC_MOUNTS, "r")) == NULL)
+ {
+ fprintf(stderr, "Cannot open %s\n", PROC_MOUNTS);
+ return;
+ }
+ while (fgets(line, BUFSIZ, fp) != NULL)
+ {
+ if ((find_mountp = strchr(line, ' ')) == NULL)
+ continue;
+ find_mountp++;
+ if ((find_space = strchr(find_mountp, ' ')) == NULL)
+ continue;
+ *find_space = '\0';
+ if ((mnt_tmp = malloc(sizeof(struct mount_list))) == NULL)
+ continue;
+ if ((mnt_tmp->mountpoint = strdup(find_mountp)) == NULL)
+ {
+ free(mnt_tmp);
+ continue;
+ }
+ mnt_tmp->next = *mnt_list;
+ *mnt_list = mnt_tmp;
+ }
+ fclose(fp);
+}
+
+static void free_proc_mounts(
+ struct mount_list *mnt_list)
+{
+ struct mount_list *mnt_tmp, *mnt_next;
+
+ mnt_tmp = mnt_list;
+ while (mnt_tmp != NULL)
+ {
+ mnt_next = mnt_tmp->next;
+ free(mnt_tmp->mountpoint);
+ free(mnt_tmp);
+ mnt_tmp = mnt_next;
+ }
+}
+
+/*
+ * Free up structures allocated in add_matched_proc and add_special_proc
+ */
+static void free_matched_procs(
+ struct procs *matched_procs)
+{
+ struct procs *procs_tmp, *procs_next;
+
+ procs_tmp = matched_procs;
+ while (procs_tmp != NULL)
+ {
+ procs_next = procs_tmp->next;
+ if (procs_tmp->command)
+ free(procs_tmp->command);
+ free(procs_tmp);
+ procs_tmp = procs_next;
+ }
+}
+
+static void free_names()
+{
+ while(names_head != NULL)
+ {
+ struct names *this_name = names_head;
+ names_head = this_name->next;
+ free_matched_procs(this_name->matched_procs);
+ free(this_name->filename);
+ free(this_name);
+ }
+ names_tail = NULL;
+}
+
+/*
+ * Free up structures allocated in add_ip_conn and add_ip6_conn
+ */
+static void free_connection(
+ struct ip_connections **conn)
+{
+ struct ip_connections *conn_tmp, *conn_next;
+
+ conn_tmp = *conn;
+ while(conn_tmp != NULL)
+ {
+ conn_next = conn_tmp->next;
+ free(conn_tmp);
+ conn_tmp = conn_next;
+ }
+ *conn = NULL;
+}
+
+#ifdef WITH_IPV6
+static void free_connection6(
+ struct ip6_connections **conn)
+{
+ struct ip6_connections *conn_tmp, *conn_next;
+
+ conn_tmp = *conn;
+ while(conn_tmp != NULL)
+ {
+ conn_next = conn_tmp->next;
+ free(conn_tmp);
+ conn_tmp = conn_next;
+ }
+ *conn = NULL;
+}
+#endif
+
+/*
+ * Free up structures allocated in add_inode
+ */
+static void free_inodes(
+ struct inode_list **match_inodes)
+{
+ struct inode_list *inode_tmp, *inode_next;
+
+ inode_tmp = *match_inodes;
+ while(inode_tmp != NULL)
+ {
+ inode_next = inode_tmp->next;
+ free(inode_tmp);
+ inode_tmp = inode_next;
+ }
+ *match_inodes = NULL;
+}
+
+/*
+ * Free up structures allocated in add_device
+ */
+static void free_devices(
+ struct device_list **match_devices)
+{
+ struct device_list *device_tmp, *device_next;
+
+ device_tmp = *match_devices;
+ while(device_tmp != NULL)
+ {
+ device_next = device_tmp->next;
+ free(device_tmp);
+ device_tmp = device_next;
+ }
+ *match_devices = NULL;
+}
+
+static void atexit_free_lists()
+{
+ free_connection(&tcp_connection_list);
+ free_connection(&udp_connection_list);
+#ifdef WITH_IPV6
+ free_connection6(&tcp6_connection_list);
+ free_connection6(&udp6_connection_list);
+#endif
+
+ free_inodes(&match_inodes);
+ free_devices(&match_devices);
+
+ free_names();
+}
+
+
+static int is_mountpoint(
+ struct mount_list **mnt_list,
+ char *arg)
+{
+ char *p;
+ struct mount_list *mnt_tmp;
+
+ if (*arg == '\0')
+ return 0;
+ /* Remove trailing slashes. */
+ for (p = arg; *p != '\0'; p++)
+ /*do nothing*/;
+ while (*(--p) == '/' && p > arg)
+ *p = '\0';
+
+ for (mnt_tmp = *mnt_list; mnt_tmp != NULL; mnt_tmp = mnt_tmp->next)
+ if (!strcmp(mnt_tmp->mountpoint, arg))
+ return 1;
+ return 0;
+}
+
+static void check_mountpoints(
+ struct mount_list **mnt_list,
+ struct names **head,
+ struct names **tail)
+{
+ struct names *this, *last;
+
+ last = NULL;
+ for(this = *head; this != NULL; this = this->next)
+ {
+ if (this->name_space == NAMESPACE_FILE &&
+ !is_mountpoint(mnt_list, this->filename))
+ {
+ fprintf(stderr,
+ _("Specified filename %s is not a mountpoint.\n"),
+ this->filename);
+ /* Remove from list */
+ if (last)
+ last->next = this->next;
+ if (*head == this)
+ *head = this->next;
+ if (*tail == this)
+ *tail = last;
+ } else {
+ last = this;
+ }
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ opt_type opts;
+ int sig_number;
+#ifdef WITH_IPV6
+ int ipv4_only, ipv6_only;
+#endif
+ unsigned char default_namespace = NAMESPACE_FILE;
+
+ dev_t netdev;
+ struct names *this_name;
+ int argc_cnt;
+ char *current_argv, *option;
+ char option_buf[3];
+ struct option *optr;
+ char *nsptr;
+ int skip_argv;
+
+ struct option options[] = {
+ {"all", 0, NULL, 'a'},
+ {"kill", 0, NULL, 'k'},
+ {"interactive", 0, NULL, 'i'},
+ {"inode", 0, NULL, 'I'},
+ {"list-signals", 0, NULL, 'l'},
+ {"mount", 0, NULL, 'm'},
+ {"ismountpoint", 0, NULL, 'M'},
+ {"namespace", 1, NULL, 'n'},
+ {"silent", 0, NULL, 's'},
+ {"user", 0, NULL, 'u'},
+ {"verbose", 0, NULL, 'v'},
+ {"writeonly", 0, NULL, 'w'},
+ {"version", 0, NULL, 'V'},
+#ifdef WITH_IPV6
+ {"ipv4", 0, NULL, '4'},
+ {"ipv6", 0, NULL, '6'},
+#endif
+ {0, 0, 0, 0}
+ };
+
+#ifdef WITH_IPV6
+ ipv4_only = ipv6_only = 0;
+#endif
+ this_name = NULL;
+ opts = 0;
+ sig_number = SIGKILL;
+
+#ifdef ENABLE_NLS
+ /* Set up the i18n */
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+#endif
+
+ netdev = find_net_dev();
+#ifndef __CYGWIN__ /* Cygwin doesn't support /proc/net/unix */
+ fill_unix_cache(&unixsockets);
+ atexit(atexit_clear_unix_cache);
+#endif
+ atexit(atexit_free_lists);
+
+ for (argc_cnt = 1; argc_cnt < argc; argc_cnt++)
+ {
+ current_argv = argv[argc_cnt];
+ if (current_argv[0] == '-') /* its an option */
+ {
+ if (current_argv[1] == '-') /* its a long option */
+ {
+ if (current_argv[2] == '\0') /* -- */
+ break;
+ /* Parse the long options */
+ option = option_buf;
+ for (optr = options; optr->name != NULL; optr++)
+ {
+ if (strcmp(current_argv + 2, optr->name) == 0)
+ {
+ sprintf(option_buf, "-%c", (char)optr->val);
+ break;
+ }
+ }
+ if (optr->name == NULL)
+ {
+ fprintf(stderr, _("%s: Invalid option %s\n"),
+ argv[0], current_argv);
+ usage(NULL);
+ }
+ } else {
+ option = current_argv;
+ }
+ skip_argv = 0;
+ while (*(++option) != '\0' && !skip_argv)/* skips over the - */
+ {
+ switch (*option)
+ {
+#ifdef WITH_IPV6
+ case '4':
+ ipv4_only = 1;
+ break;
+ case '6':
+ ipv6_only = 1;
+ break;
+#endif /* WITH_IPV6 */
+ case 'a':
+ opts |= OPT_ALLFILES;
+ break;
+ case 'c':
+ opts |= OPT_MOUNTS;
+ break;
+ case 'f':
+ /* ignored */
+ break;
+ case 'h':
+ usage(NULL);
+ break;
+ case 'i':
+ opts |= OPT_INTERACTIVE;
+ break;
+ case 'I':
+ opts |= OPT_ALWAYSSTAT;
+ break;
+ case 'k':
+ opts |= OPT_KILL;
+ break;
+ case 'l':
+ list_signals();
+ return 0;
+ case 'm':
+ opts |= OPT_MOUNTS;
+ break;
+ case 'M':
+ opts |= OPT_ISMOUNTPOINT;
+ break;
+ case 'n':
+ argc_cnt++;
+ if (argc_cnt >= argc)
+ {
+ usage(_
+ ("Namespace option requires an argument."));
+ }
+ skip_argv = 1;
+ //while(option != '\0') option++;
+ if (strcmp(argv[argc_cnt], "tcp") == 0)
+ default_namespace = NAMESPACE_TCP;
+ else if (strcmp(argv[argc_cnt], "udp") == 0)
+ default_namespace = NAMESPACE_UDP;
+ else if (strcmp(argv[argc_cnt], "file") == 0)
+ default_namespace = NAMESPACE_FILE;
+ else
+ usage(_
+ ("Invalid namespace name"));
+ break;
+ case 's':
+ opts |= OPT_SILENT;
+ break;
+ case 'u':
+ opts |= OPT_USER;
+ break;
+ case 'v':
+ opts |= OPT_VERBOSE;
+ break;
+ case 'w':
+ opts |= OPT_WRITE;
+ break;
+ case 'V':
+ print_version();
+ return 0;
+ default:
+ if (isupper(*option) || isdigit(*option))
+ {
+ sig_number = get_signal(current_argv + 1, argv[0]);
+ skip_argv = 1;
+ break;
+ }
+ fprintf(stderr, "%s: Invalid option %c\n",
+ argv[0], *option);
+ usage(NULL);
+ break;
+ } /* switch */
+ } /* while option */
+ continue;
+ }
+
+#if defined(HAVE_DECL_SYS_STATX) && HAVE_DECL_SYS_STATX == 1
+ if ((opts & OPT_ALWAYSSTAT))
+ stat_flags = 0; /* Triggers sync with e.g. remote NFS server even on autofs */
+#endif
+ /* an option */
+ /* Not an option, must be a file specification */
+ if ((this_name = malloc(sizeof(struct names))) == NULL)
+ continue;
+ this_name->next = NULL;
+ /* try to find namespace spec */
+ this_name->name_space = default_namespace;
+ if (((nsptr = strchr(current_argv, '/')) != NULL)
+ && (nsptr != current_argv))
+ {
+ if (strcmp(nsptr + 1, "tcp") == 0)
+ {
+ this_name->name_space = NAMESPACE_TCP;
+ *nsptr = '\0';
+ } else if (strcmp(nsptr + 1, "udp") == 0)
+ {
+ this_name->name_space = NAMESPACE_UDP;
+ *nsptr = '\0';
+ } else if (strcmp(nsptr + 1, "file") == 0)
+ {
+ this_name->name_space = NAMESPACE_FILE;
+ *nsptr = '\0';
+ }
+ }
+ this_name->matched_procs = NULL;
+ if (opts & (OPT_MOUNTS | OPT_ISMOUNTPOINT)
+ && this_name->name_space != NAMESPACE_FILE)
+ {
+ free(this_name);
+ usage(_
+ ("You can only use files with mountpoint options"));
+ }
+ switch (this_name->name_space)
+ {
+ case NAMESPACE_TCP:
+ if (asprintf
+ (&(this_name->filename), "%s/tcp",
+ current_argv) > 0)
+ {
+#ifdef WITH_IPV6
+ parse_inet(this_name, ipv4_only, ipv6_only,
+ &tcp_connection_list, &tcp6_connection_list);
+#else
+ parse_inet(this_name, &tcp_connection_list);
+#endif
+ }
+ break;
+ case NAMESPACE_UDP:
+ if (asprintf (&(this_name->filename), "%s/udp", current_argv) > 0)
+ {
+#ifdef WITH_IPV6
+ parse_inet(this_name, ipv4_only, ipv6_only,
+ &udp_connection_list, &udp6_connection_list);
+#else
+ parse_inet(this_name, &udp_connection_list);
+#endif
+ }
+ break;
+ default: /* FILE */
+ this_name->filename = strdup(current_argv);
+ if (parse_file(this_name, &match_inodes, opts) == 0)
+ {
+ if (opts & OPT_MOUNTS)
+ parse_mounts(this_name, &match_devices, opts);
+ else
+ parse_unixsockets(this_name, &match_inodes, unixsockets);
+ }
+ break;
+ }
+
+ if (names_head == NULL)
+ names_head = this_name;
+ if (names_tail != NULL)
+ names_tail->next = this_name;
+ names_tail = this_name;
+ } /* for across the argvs */
+ if (names_head == NULL)
+ usage(_("No process specification given"));
+
+ /* Check if -M flag was used and if so check mounts */
+ if (opts & OPT_ISMOUNTPOINT)
+ {
+ struct mount_list *mounts = NULL;
+ read_proc_mounts(&mounts);
+ check_mountpoints(&mounts, &names_head, &names_tail);
+ free_proc_mounts(mounts);
+ }
+
+ if (opts & OPT_SILENT)
+ {
+ opts &= ~OPT_VERBOSE;
+ opts &= ~OPT_USER;
+ if (opts & OPT_ALLFILES)
+ usage(_
+ ("all option cannot be used with silent option."));
+ }
+#ifdef WITH_IPV6
+ if (ipv4_only && ipv6_only)
+ usage(_
+ ("You cannot search for only IPv4 and only IPv6 sockets at the same time"));
+ if (!ipv6_only)
+ {
+#endif
+ if (tcp_connection_list != NULL)
+ find_net_sockets(&match_inodes, tcp_connection_list, "tcp", netdev);
+ if (udp_connection_list != NULL)
+ find_net_sockets(&match_inodes, udp_connection_list, "udp", netdev);
+#ifdef WITH_IPV6
+ }
+ if (!ipv4_only)
+ {
+ if (tcp6_connection_list != NULL)
+ find_net6_sockets(&match_inodes, tcp6_connection_list,
+ "tcp", netdev);
+ if (udp6_connection_list != NULL)
+ find_net6_sockets(&match_inodes, udp6_connection_list,
+ "udp", netdev);
+ }
+#endif
+ free_connection(&tcp_connection_list);
+ free_connection(&udp_connection_list);
+#ifdef WITH_IPV6
+ free_connection6(&tcp6_connection_list);
+ free_connection6(&udp6_connection_list);
+#endif
+#ifdef DEBUG
+ debug_match_lists(names_head, match_inodes, match_devices);
+#endif
+ scan_procs(names_head, match_inodes, match_devices, unixsockets, netdev);
+#ifndef __CYGWIN__ /* Cygwin doesn't support /proc/net/unix */
+ clear_unix_cache(&unixsockets);
+#endif
+ scan_knfsd(names_head, match_inodes, match_devices);
+ scan_mounts(names_head, match_inodes, match_devices);
+ scan_swaps(names_head, match_inodes, match_devices);
+ free_inodes(&match_inodes);
+ free_devices(&match_devices);
+ return print_matches(names_head, opts, sig_number);
+}
+
+/*
+ * returns 0 if match, 1 if no match
+ */
+static int print_matches(
+ struct names *names_head,
+ const opt_type opts,
+ const int sig_number)
+{
+ struct names *nptr;
+ struct procs *pptr;
+ char head = 0;
+ char first = 1;
+ int len = 0;
+ struct passwd *pwent = NULL;
+ int have_match = 0;
+ int have_kill = 0;
+ int name_has_procs = 0;
+
+ for (nptr = names_head; nptr != NULL; nptr = nptr->next)
+ {
+ if (opts & OPT_SILENT)
+ {
+ for (pptr = nptr->matched_procs; pptr != NULL;
+ pptr = pptr->next)
+ {
+ if (pptr->proc_type != PTYPE_NORMAL)
+ continue;
+
+ have_match = 1;
+ }
+ } else { /* We're not silent */
+ if ((opts & OPT_ALLFILES) == 0)
+ {
+ name_has_procs = 0;
+ if (opts & OPT_VERBOSE)
+ {
+ if (nptr->matched_procs)
+ name_has_procs = 1;
+ } else {
+ for (pptr = nptr->matched_procs;
+ pptr != NULL; pptr = pptr->next)
+ {
+ if (pptr->proc_type == PTYPE_NORMAL)
+ {
+ name_has_procs = 1;
+ break;
+ }
+ }
+ }
+ }
+ if (name_has_procs == 1 || opts & OPT_ALLFILES)
+ {
+ if (head == 0 && opts & OPT_VERBOSE)
+ {
+ fprintf(stderr,
+ _("%*s USER PID ACCESS COMMAND\n"), NAME_FIELD, "");
+ head = 1;
+ }
+
+ fprintf(stderr, "%s:", nptr->filename);
+ len = strlen(nptr->filename) + 1;
+ }
+
+ first = 1;
+ for (pptr = nptr->matched_procs; pptr != NULL; pptr = pptr->next)
+ {
+ /* Suppress any special "processes" */
+ if (!(opts & OPT_VERBOSE)
+ && (pptr->proc_type != PTYPE_NORMAL))
+ continue;
+
+ have_match = 1;
+ if (opts & (OPT_VERBOSE | OPT_USER))
+ {
+ if (pwent == NULL || pwent->pw_uid != pptr->uid)
+ pwent = getpwuid(pptr->uid);
+ }
+ if (len > NAME_FIELD && (opts & OPT_VERBOSE))
+ {
+ putc('\n', stderr);
+ len = 0;
+ }
+ if ((opts & OPT_VERBOSE) || first)
+ while (len++ < NAME_FIELD)
+ putc(' ', stderr);
+ if (opts & OPT_VERBOSE)
+ {
+ if (pwent == NULL)
+ fprintf(stderr, " %-8s ",
+ _("(unknown)"));
+ else
+ fprintf(stderr, " %-8s ",
+ pwent->pw_name);
+ }
+ if (pptr->proc_type == PTYPE_NORMAL)
+ printf(" %5d", pptr->pid);
+ else
+ printf("kernel");
+ fflush(stdout);
+ if (opts & OPT_VERBOSE)
+ {
+ switch (pptr->proc_type)
+ {
+ case PTYPE_KNFSD:
+ fprintf(stderr, " knfsd ");
+ break;
+ case PTYPE_MOUNT:
+ fprintf(stderr, " mount ");
+ break;
+ case PTYPE_SWAP:
+ fprintf(stderr, " swap ");
+ break;
+ default:
+ fprintf(stderr, " %c%c%c%c%c ",
+ pptr->access & ACCESS_FILE ?
+ (pptr->access & ACCESS_FILEWR ? 'F' : 'f') : '.',
+ pptr->access & ACCESS_ROOT ? 'r' : '.',
+ pptr->access & ACCESS_CWD ? 'c' : '.',
+ pptr->access & ACCESS_EXE ? 'e' : '.',
+ (pptr->access & ACCESS_MMAP)
+ && !(pptr-> access & ACCESS_EXE) ? 'm' : '.');
+ } /* switch */
+ } else {
+ if (pptr->access & ACCESS_ROOT)
+ putc('r', stderr);
+ if (pptr->access & ACCESS_CWD)
+ putc('c', stderr);
+ if (pptr->access & ACCESS_EXE)
+ putc('e', stderr);
+ else if (pptr->access & ACCESS_MMAP)
+ putc('m', stderr);
+ }
+ if (opts & OPT_USER)
+ {
+ if (pwent == NULL)
+ fprintf(stderr, " %-8s ", _("(unknown)"));
+ else
+ fprintf(stderr, "(%s)", pwent->pw_name);
+ }
+ if (opts & OPT_VERBOSE)
+ {
+ if (pptr->command == NULL)
+ fprintf(stderr, "???\n");
+ else
+ fprintf(stderr, "%s\n", pptr->command);
+ }
+ len = 0;
+ first = 0;
+ }
+ if (opts & OPT_VERBOSE)
+ {
+ /* put a newline if showing all files and no procs */
+ if (nptr->matched_procs == NULL && (opts & OPT_ALLFILES))
+ putc('\n', stderr);
+ } else {
+ if (name_has_procs || (opts & OPT_ALLFILES))
+ putc('\n', stderr);
+ }
+ } /* be silent */
+ if (opts & OPT_KILL)
+ have_kill |= kill_matched_proc(nptr->matched_procs,
+ opts, sig_number);
+
+ } /* next name */
+ if (opts & OPT_KILL)
+ return (have_kill == 1 ? 0 : 1);
+ else
+ return (have_match == 1 ? 0 : 1);
+
+}
+
+static struct stat *get_pidstat(
+ const pid_t pid,
+ const char *filename)
+{
+ char pathname[PATH_MAX];
+ struct stat *st;
+
+ if ((st = (struct stat *)malloc(sizeof(struct stat))) == NULL)
+ return NULL;
+ snprintf(pathname, PATH_MAX-1, "/proc/%d/%s", pid, filename);
+ if (statn(pathname, STATX_UID|STATX_INO|STATX_TYPE, st) != 0)
+ {
+ free(st);
+ return NULL;
+ }
+ return st;
+}
+
+static void check_dir(
+ const pid_t pid,
+ const char *dirname,
+ struct device_list *dev_head,
+ struct inode_list *ino_head,
+ const uid_t uid,
+ const char access,
+ struct unixsocket_list *sockets,
+ dev_t netdev)
+{
+ DIR *dirp;
+ dev_t thedev;
+ struct dirent *direntry;
+ struct inode_list *ino_tmp;
+ struct device_list *dev_tmp;
+ struct unixsocket_list *sock_tmp;
+ struct stat st, lst;
+ char *dirpath;
+ char filepath[PATH_MAX];
+ char real_filepath[PATH_MAX];
+
+ if (asprintf(&dirpath, "/proc/%d/%s", pid, dirname) < 0)
+ return;
+ if ((dirp = opendir(dirpath)) == NULL)
+ {
+ free(dirpath);
+ return;
+ }
+ free(dirpath);
+
+ while ((direntry = readdir(dirp)) != NULL)
+ {
+ if (direntry->d_name[0] < '0' || direntry->d_name[0] > '9')
+ continue;
+
+ snprintf(filepath, sizeof filepath - 1, "/proc/%d/%s/%s",
+ pid, dirname, direntry->d_name);
+
+ if (statn(filepath, STATX_INO, &st) != 0)
+ {
+ if (errno != ENOENT && errno != ENOTDIR && errno != EACCES)
+ {
+ fprintf(stderr, _("Cannot stat file %s: %s\n"),
+ filepath, strerror(errno));
+ }
+ } else {
+ thedev = st.st_dev;
+ if (thedev == netdev)
+ {
+ for (sock_tmp = sockets; sock_tmp != NULL;
+ sock_tmp = sock_tmp->next)
+ {
+ if (sock_tmp->net_inode == st.st_ino)
+ {
+ st.st_ino = sock_tmp->inode;
+ st.st_dev = sock_tmp->dev;
+ thedev = sock_tmp->dev;
+ break;
+ }
+ }
+ }
+ for (dev_tmp = dev_head; dev_tmp != NULL;
+ dev_tmp = dev_tmp->next)
+ {
+ if (thedev != dev_tmp->device)
+ continue;
+
+ /* check the paths match if it is not a block device or socket */
+ if (! S_ISBLK(dev_tmp->name->st.st_mode)
+ && !S_ISSOCK(st.st_mode))
+ {
+ if (readlink(filepath, real_filepath, PATH_MAX-1) < 0)
+ {
+ if (strncmp(dev_tmp->name->filename, filepath,
+ strlen(dev_tmp->name->filename)) != 0)
+ continue;
+ } else {
+ if (strncmp(dev_tmp->name->filename, real_filepath,
+ strlen(dev_tmp->name->filename)) != 0)
+ continue;
+ }
+ }
+ if (access == ACCESS_FILE
+ && (lstat(filepath, &lst) == 0)
+ && (lst.st_mode & S_IWUSR))
+ {
+ add_matched_proc(dev_tmp->name, pid, uid,
+ ACCESS_FILEWR | access);
+ } else {
+ add_matched_proc(dev_tmp->name, pid, uid, access);
+ }
+ }
+ for (ino_tmp = ino_head; ino_tmp != NULL; ino_tmp = ino_tmp->next)
+ {
+ if (thedev != ino_tmp->device)
+ continue;
+ if (!st.st_ino && statn(filepath, STATX_INO, &st) != 0)
+ {
+ fprintf(stderr, _("Cannot stat file %s: %s\n"),
+ filepath, strerror(errno));
+ continue;
+ }
+ if (st.st_ino == ino_tmp->inode)
+ {
+ if (access == ACCESS_FILE
+ && (lstat(filepath, &lst) == 0)
+ && (lst.st_mode & S_IWUSR))
+ {
+ add_matched_proc(ino_tmp->name, pid, uid,
+ ACCESS_FILEWR | access);
+ } else {
+ add_matched_proc(ino_tmp->name, pid, uid, access);
+ }
+ }
+ }
+ }
+ } /* while fd_dent */
+ closedir(dirp);
+}
+
+static void check_map(
+ const pid_t pid,
+ const char *filename,
+ struct device_list *dev_head,
+ struct inode_list *ino_head,
+ const uid_t uid,
+ const char access)
+{
+ char *pathname;
+ char line[BUFSIZ];
+ struct inode_list *ino_tmp;
+ struct device_list *dev_tmp;
+ FILE *fp;
+ unsigned long long tmp_inode;
+ unsigned int tmp_maj, tmp_min;
+ dev_t tmp_device;
+
+ if (asprintf(&pathname, "/proc/%d/%s", pid, filename) < 0)
+ return;
+ if ((fp = fopen(pathname, "r")) == NULL)
+ {
+ free(pathname);
+ return;
+ }
+ free(pathname);
+ while (fgets(line, BUFSIZ, fp))
+ {
+ if (sscanf(line, "%*s %*s %*s %x:%x %lld",
+ &tmp_maj, &tmp_min, &tmp_inode) == 3)
+ {
+ tmp_device = tmp_maj * 256 + tmp_min;
+ for (dev_tmp = dev_head; dev_tmp != NULL; dev_tmp = dev_tmp->next)
+ if (dev_tmp->device == tmp_device)
+ add_matched_proc(dev_tmp->name, pid, uid, access);
+ for (ino_tmp = ino_head; ino_tmp != NULL; ino_tmp = ino_tmp->next)
+ if (ino_tmp->device == tmp_device
+ && ino_tmp->inode == tmp_inode)
+ add_matched_proc(ino_tmp->name, pid, uid, access);
+ }
+ }
+ fclose(fp);
+}
+
+static uid_t getpiduid(
+ const pid_t pid)
+{
+ char *pathname;
+ struct stat st;
+
+ if (asprintf(&pathname, "/proc/%d", pid) < 0)
+ return 0;
+ if (statn(pathname, STATX_UID, &st) != 0)
+ {
+ free(pathname);
+ return 0;
+ }
+ free(pathname);
+ return st.st_uid;
+}
+
+/*
+ * fill_unix_cache : Create a list of Unix sockets
+ * This list is used later for matching purposes
+ */
+void fill_unix_cache(
+ struct unixsocket_list **unixsocket_head)
+{
+ FILE *fp;
+ char line[BUFSIZ];
+ unsigned long long scanned_inode;
+ struct stat st;
+ struct unixsocket_list *newsocket;
+
+ if ((fp = fopen("/proc/net/unix", "r")) == NULL)
+ {
+ fprintf(stderr, _("Cannot open /proc/net/unix: %s\n"),
+ strerror(errno));
+ return;
+ }
+ while (fgets(line, BUFSIZ, fp) != NULL)
+ {
+ char *path;
+ char *scanned_path = NULL;
+ if (sscanf(line, "%*x: %*x %*x %*x %*x %*d %llu %ms",
+ &scanned_inode, &scanned_path) != 2)
+ {
+ if (scanned_path)
+ free(scanned_path);
+ continue;
+ }
+ if (scanned_path == NULL)
+ continue;
+ path = scanned_path;
+ if (*scanned_path == '@')
+ scanned_path++;
+ if (statn(scanned_path, STATX_INO, &st) < 0)
+ {
+ free(path);
+ continue;
+ }
+ if ((newsocket = (struct unixsocket_list *)
+ malloc(sizeof(struct unixsocket_list))) == NULL)
+ {
+ free(path);
+ continue;
+ }
+ newsocket->sun_name = strdup(scanned_path);
+ newsocket->inode = st.st_ino;
+ newsocket->dev = st.st_dev;
+ newsocket->net_inode = scanned_inode;
+ newsocket->next = *unixsocket_head;
+ *unixsocket_head = newsocket;
+ free(path);
+ } /* while */
+
+ fclose(fp);
+}
+
+/*
+ * Free up the list of Unix sockets
+ */
+void clear_unix_cache(
+ struct unixsocket_list **unixsocket_head)
+{
+ while(*unixsocket_head != NULL)
+ {
+ struct unixsocket_list *oldsocket = *unixsocket_head;
+ *unixsocket_head = oldsocket->next;
+ free(oldsocket->sun_name);
+ free(oldsocket);
+ }
+}
+
+static void atexit_clear_unix_cache()
+{
+ clear_unix_cache(&unixsockets);
+}
+
+#ifdef DEBUG
+/* often not used, doesn't need translation */
+static void debug_match_lists(
+ struct names *names_head,
+ struct inode_list *ino_head,
+ struct device_list *dev_head)
+{
+ struct names *nptr;
+ struct inode_list *iptr;
+ struct device_list *dptr;
+
+ fprintf(stderr, "Specified Names:\n");
+ for (nptr = names_head; nptr != NULL; nptr = nptr->next)
+ {
+ fprintf(stderr, "\t%s %c\n", nptr->filename, nptr->name_space);
+ }
+ fprintf(stderr, "\nInodes:\n");
+ for (iptr = ino_head; iptr != NULL; iptr = iptr->next)
+ {
+ fprintf(stderr, " Dev:%0lx Inode:(%0ld) 0x%0lx => %s\n",
+ (unsigned long)iptr->device, (unsigned long)iptr->inode,
+ (unsigned long)iptr->inode, iptr->name->filename);
+ }
+ fprintf(stderr, "\nDevices:\n");
+ for (dptr = dev_head; dptr != NULL; dptr = dptr->next)
+ {
+ fprintf(stderr, "\tDev:%0lx\n", (unsigned long)dptr->device);
+ }
+}
+
+#endif
+
+/* 0 = no, 1=yes */
+static int ask(
+ const pid_t pid)
+{
+ int res;
+ size_t len = 0;
+ char *line = NULL;
+
+ fflush(stdout);
+ while (1)
+ {
+ fprintf(stderr, _("Kill process %d ? (y/N) "), pid);
+ fflush(stderr);
+ if (getline(&line, &len, stdin) < 0)
+ return 0;
+ if (line[0] == '\n')
+ {
+ free(line);
+ return 0;
+ }
+ res = rpmatch(line);
+ if (res >= 0)
+ {
+ free(line);
+ return res;
+ }
+ } /* while */
+}
+
+static int kill_matched_proc(
+ struct procs *proc_head,
+ const opt_type opts,
+ const int sig_number)
+{
+ struct procs *pptr;
+ pid_t mypid;
+ int ret = 0;
+
+ mypid = getpid();
+
+ for (pptr = proc_head; pptr != NULL; pptr = pptr->next)
+ {
+ if (pptr->pid == mypid)
+ continue; /* dont kill myself */
+ if (pptr->proc_type != PTYPE_NORMAL)
+ continue;
+ if ((opts & OPT_WRITE) && ((pptr->access & ACCESS_FILEWR) == 0))
+ continue;
+ if ((opts & OPT_INTERACTIVE) && (ask(pptr->pid) == 0))
+ continue;
+ if (kill(pptr->pid, sig_number) < 0)
+ {
+ fprintf(stderr, _("Could not kill process %d: %s\n"),
+ pptr->pid, strerror(errno));
+ continue;
+ }
+ ret = 1;
+ }
+ return ret;
+}
+
+static dev_t find_net_dev(void)
+{
+ int skt;
+ struct stat st;
+
+ if ((skt = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
+ {
+ fprintf(stderr, _("Cannot open a network socket.\n"));
+ return -1;
+ }
+ if (fstatn(skt, STATX_INO, &st) != 0)
+ {
+ fprintf(stderr, _("Cannot find socket's device number.\n"));
+ close(skt);
+ return -1;
+ }
+ close(skt);
+ return st.st_dev;
+}
+
+static void scan_knfsd(
+ struct names *names_head,
+ struct inode_list *ino_head,
+ struct device_list *dev_head)
+{
+ struct device_list *dev_tmp;
+ struct inode_list *ino_tmp;
+ FILE *fp;
+ char line[BUFSIZ];
+ char *find_space;
+ struct stat st;
+
+ if ( (ino_head == NULL) && (dev_head == NULL) )
+ return;
+
+
+ if ((fp = fopen(KNFSD_EXPORTS, "r")) == NULL)
+ {
+#ifdef DEBUG
+ printf("Cannot open %s\n", KNFSD_EXPORTS);
+#endif
+ return;
+ }
+ while (fgets(line, BUFSIZ, fp) != NULL)
+ {
+ if (line[0] == '#')
+ continue;
+
+ if ((find_space = strpbrk(line, " \t")) == NULL)
+ continue;
+
+ *find_space = '\0';
+ if (statn(line, STATX_INO, &st) != 0)
+ continue;
+
+ /* Scan the devices */
+ for (dev_tmp = dev_head; dev_tmp != NULL;
+ dev_tmp = dev_tmp->next)
+ {
+ if (st.st_dev == dev_tmp->device)
+ add_special_proc(dev_tmp->name, PTYPE_KNFSD, 0, line);
+ }
+
+ for (ino_tmp = ino_head; ino_tmp != NULL;
+ ino_tmp = ino_tmp->next)
+ {
+ if (st.st_dev == ino_tmp->device
+ && st.st_ino == ino_tmp->inode)
+ add_special_proc(ino_tmp->name, PTYPE_KNFSD, 0, line);
+ }
+ }
+ fclose(fp);
+}
+
+static void scan_mounts(
+ struct names *names_head,
+ struct inode_list *ino_head,
+ struct device_list *dev_head)
+{
+ struct device_list *dev_tmp;
+ struct inode_list *ino_tmp;
+ FILE *fp;
+ char line[BUFSIZ];
+ char *find_mountp;
+ char *find_space;
+ struct stat st;
+
+ if ( (ino_head == NULL) && (dev_head == NULL) )
+ return;
+
+
+ if ((fp = fopen(PROC_MOUNTS, "r")) == NULL)
+ {
+ fprintf(stderr, "Cannot open %s\n", PROC_MOUNTS);
+ return;
+ }
+ while (fgets(line, BUFSIZ, fp) != NULL)
+ {
+ if ((find_mountp = strchr(line, ' ')) == NULL)
+ continue;
+ find_mountp++;
+ if ((find_space = strchr(find_mountp, ' ')) == NULL)
+ continue;
+ *find_space = '\0';
+ if (statn(find_mountp, STATX_INO, &st) != 0)
+ continue;
+ /* Scan the devices */
+ for (dev_tmp = dev_head; dev_tmp != NULL;
+ dev_tmp = dev_tmp->next)
+ {
+ if (st.st_dev == dev_tmp->device)
+ add_special_proc(dev_tmp->name, PTYPE_MOUNT, 0, find_mountp);
+ }
+ for (ino_tmp = ino_head; ino_tmp != NULL;
+ ino_tmp = ino_tmp->next)
+ {
+ if (st.st_dev == ino_tmp->device
+ && st.st_ino == ino_tmp->inode)
+ add_special_proc(ino_tmp->name, PTYPE_MOUNT, 0, find_mountp);
+ }
+ }
+ fclose(fp);
+}
+
+static void scan_swaps(
+ struct names *names_head,
+ struct inode_list *ino_head,
+ struct device_list *dev_head)
+{
+ struct device_list *dev_tmp;
+ struct inode_list *ino_tmp;
+ FILE *fp;
+ char line[BUFSIZ];
+ char *find_space;
+ struct stat st;
+
+ if ( (ino_head == NULL) && (dev_head == NULL) )
+ return;
+
+ if ((fp = fopen(PROC_SWAPS, "r")) == NULL)
+ {
+ /*fprintf(stderr, "Cannot open %s\n", PROC_SWAPS); */
+ return;
+ }
+ /* lines are filename type */
+ while (fgets(line, BUFSIZ, fp) != NULL)
+ {
+ if ((find_space = strchr(line, ' ')) == NULL)
+ continue;
+ *find_space = '\0';
+ find_space++;
+ while (*find_space == ' ')
+ {
+ find_space++;
+ if (*find_space == '\0')
+ continue;
+ }
+ if (statn(line, STATX_INO, &st) != 0)
+ continue;
+
+ /* Scan the devices */
+ for (dev_tmp = dev_head; dev_tmp != NULL;
+ dev_tmp = dev_tmp->next)
+ {
+ if (st.st_dev == dev_tmp->device)
+ add_special_proc(dev_tmp->name, PTYPE_SWAP, 0, line);
+ }
+ for (ino_tmp = ino_head; ino_tmp != NULL;
+ ino_tmp = ino_tmp->next)
+ {
+ if (st.st_dev == ino_tmp->device
+ && st.st_ino == ino_tmp->inode)
+ add_special_proc(ino_tmp->name, PTYPE_SWAP, 0, line);
+ }
+ }
+ fclose(fp);
+}
+
+/*
+ * Somehow the realpath(3) glibc function call, nevertheless
+ * it avoids lstat(2) system calls.
+ */
+static char real[PATH_MAX + 1];
+char *expandpath(
+ const char *path)
+{
+ char tmpbuf[PATH_MAX + 1];
+ const char *start, *end;
+ char *curr, *dest;
+ int deep = MAXSYMLINKS;
+
+ if (!path || *path == '\0')
+ return (char *)0;
+
+ curr = &real[0];
+
+ if (*path != '/')
+ {
+ if (!getcwd(curr, PATH_MAX))
+ return (char *)0;
+ dest = strchr(curr, '\0');
+ } else {
+ *curr = '/';
+ dest = curr + 1;
+ }
+
+ for (start = end = path; *start; start = end)
+ {
+ while (*start == '/')
+ ++start;
+
+ for (end = start; *end && *end != '/'; ++end) ;
+
+ if (end - start == 0)
+ break;
+ else if (end - start == 1 && start[0] == '.')
+ {
+ ;
+ } else if (end - start == 2 && start[0] == '.' && start[1] == '.')
+ {
+ if (dest > curr + 1)
+ while ((--dest)[-1] != '/') ;
+ } else {
+ char lnkbuf[PATH_MAX + 1];
+ size_t len;
+ ssize_t n;
+
+ if (dest[-1] != '/')
+ *dest++ = '/';
+
+ if (dest + (end - start) > curr + PATH_MAX)
+ {
+ errno = ENAMETOOLONG;
+ return (char *)0;
+ }
+
+ dest = mempcpy(dest, start, end - start);
+ *dest = '\0';
+
+ if (deep-- < 0)
+ {
+ errno = ELOOP;
+ return (char *)0;
+ }
+
+ errno = 0;
+ if ((n = readlink(curr, lnkbuf, PATH_MAX)) < 0)
+ {
+ deep = MAXSYMLINKS;
+ if (errno == EINVAL)
+ continue; /* Not a symlink */
+ return (char *)0;
+ }
+ lnkbuf[n] = '\0'; /* Don't be fooled by readlink(2) */
+
+ len = strlen(end);
+ if ((n + len) > PATH_MAX)
+ {
+ errno = ENAMETOOLONG;
+ return (char *)0;
+ }
+
+ memmove(&tmpbuf[n], end, len + 1);
+ path = end = memcpy(tmpbuf, lnkbuf, n);
+
+ if (lnkbuf[0] == '/')
+ dest = curr + 1;
+ else if (dest > curr + 1)
+ while ((--dest)[-1] != '/') ;
+
+ }
+ }
+
+ if (dest > curr + 1 && dest[-1] == '/')
+ --dest;
+ *dest = '\0';
+
+ return curr;
+}
diff --git a/src/fuser.h b/src/fuser.h
new file mode 100644
index 0000000..4500ec5
--- /dev/null
+++ b/src/fuser.h
@@ -0,0 +1,113 @@
+
+/* Option Flags */
+typedef unsigned short opt_type;
+
+#define OPT_VERBOSE 1
+#define OPT_ALLFILES 2
+#define OPT_MOUNTS 4
+#define OPT_KILL 8
+#define OPT_INTERACTIVE 16
+#define OPT_SILENT 32
+#define OPT_USER 64
+#define OPT_ISMOUNTPOINT 128
+#define OPT_WRITE 256
+#define OPT_ALWAYSSTAT 512
+
+struct procs {
+ pid_t pid;
+ uid_t uid;
+ char access;
+ char proc_type;
+ char *username;
+ char *command;
+ struct procs *next;
+};
+
+/* For the access field above */
+#define ACCESS_CWD 1
+#define ACCESS_EXE 2
+#define ACCESS_FILE 4
+#define ACCESS_ROOT 8
+#define ACCESS_MMAP 16
+#define ACCESS_FILEWR 32
+
+/* For the proc_type field above */
+#define PTYPE_NORMAL 0
+#define PTYPE_MOUNT 1
+#define PTYPE_KNFSD 2
+#define PTYPE_SWAP 3
+
+struct names {
+ char *filename;
+ unsigned char name_space;
+ struct stat st;
+ struct procs *matched_procs;
+ struct names *next;
+};
+
+struct ip_connections {
+ struct names *name;
+ unsigned long lcl_port;
+ unsigned long rmt_port;
+ struct in_addr rmt_address;
+ struct ip_connections *next;
+};
+
+struct ip6_connections {
+ struct names *name;
+ unsigned long lcl_port;
+ unsigned long rmt_port;
+ struct in6_addr rmt_address;
+ struct ip6_connections *next;
+};
+
+struct inode_list {
+ struct names *name;
+ dev_t device;
+ ino_t inode;
+ struct inode_list *next;
+};
+
+struct device_list {
+ struct names *name;
+ dev_t device;
+ struct device_list *next;
+};
+
+struct unixsocket_list {
+ char *sun_name;
+ ino_t inode;
+ ino_t net_inode;
+ dev_t dev;
+ struct unixsocket_list *next;
+};
+
+struct mount_list {
+ char *mountpoint;
+ struct mount_list *next;
+};
+
+#if defined (__GNUC__) && defined(WITH_MOUNTINFO_LIST)
+# include "lists.h"
+typedef struct mntinfo_s {
+ list_t this;
+ int id, parid;
+ dev_t dev;
+ size_t nlen;
+ char *mpoint;
+} mntinfo_t;
+#else
+# undef WITH_MOUNTINFO_LIST
+#endif
+
+#define NAMESPACE_FILE 0
+#define NAMESPACE_TCP 1
+#define NAMESPACE_UDP 2
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif /* PATH_MAX */
+
+#define KNFSD_EXPORTS "/proc/fs/nfs/exports"
+#define PROC_MOUNTS "/proc/mounts"
+#define PROC_SWAPS "/proc/swaps"
diff --git a/src/i18n.h b/src/i18n.h
new file mode 100644
index 0000000..a0b4439
--- /dev/null
+++ b/src/i18n.h
@@ -0,0 +1,26 @@
+/* i18n.h - common i18n declarations for psmisc programs. */
+
+#ifndef I18N_H
+#define I18N_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef ENABLE_NLS
+#include <locale.h>
+#include <libintl.h>
+#define _(String) gettext (String)
+#else
+#define _(String) (String)
+#endif
+
+#endif
+
+#ifndef HAVE_RPMATCH
+#define rpmatch(line) \
+ ( (line == NULL)? -1 : \
+ (*line == 'y' || *line == 'Y')? 1 : \
+ (*line == 'n' || *line == 'N')? 0 : \
+ -1 )
+#endif
diff --git a/src/killall.c b/src/killall.c
new file mode 100644
index 0000000..81dcc4b
--- /dev/null
+++ b/src/killall.c
@@ -0,0 +1,1069 @@
+/*
+ * killall.c - kill processes by name or list PIDs
+ *
+ * Copyright (C) 1993-2002 Werner Almesberger
+ * Copyright (C) 2002-2024 Craig Small <csmall@dropbear.xyz>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <signal.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <regex.h>
+#include <ctype.h>
+#include <assert.h>
+
+#ifdef WITH_SELINUX
+#include <dlfcn.h>
+#include <selinux/selinux.h>
+#endif /*WITH_SELINUX*/
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif /* HAVE_LOCALE_H */
+
+#include "i18n.h"
+#include "comm.h"
+#include "signals.h"
+
+#define PROC_BASE "/proc"
+#define MAX_NAMES (int)(sizeof(unsigned long)*8)
+
+#define TSECOND "s"
+#define TMINUTE "m"
+#define THOUR "h"
+#define TDAY "d"
+#define TWEEK "w"
+#define TMONTH "M"
+#define TYEAR "y"
+
+#define TMAX_SECOND 31536000
+#define TMAX_MINUTE 525600
+#define TMAX_HOUR 8760
+#define TMAX_DAY 365
+#define TMAX_WEEK 48
+#define TMAX_MONTH 12
+#define TMAX_YEAR 1
+
+#define ER_REGFAIL -1
+#define ER_NOMEM -2
+#define ER_UNKWN -3
+#define ER_OOFRA -4
+
+static pid_t opt_ns_pid = 0;
+
+static int verbose = 0, exact = 0, interactive = 0, reg = 0,
+ quiet = 0, wait_until_dead = 0, process_group = 0,
+ ignore_case = 0;
+static long younger_than = 0, older_than = 0;
+
+typedef struct NAMEINFO {
+ const char *name;
+ int name_length;
+ struct stat st;
+} NAMEINFO;
+
+static int
+ask (char *name, pid_t pid, const int signal)
+{
+ int res;
+ size_t len;
+ char *line;
+
+ line = NULL;
+ len = 0;
+
+ do {
+ if (signal == SIGTERM)
+ printf (_("Kill %s(%s%d) ? (y/N) "), name, process_group ? "pgid " : "",
+ pid);
+ else
+ printf (_("Signal %s(%s%d) ? (y/N) "), name, process_group ? "pgid " : "",
+ pid);
+
+ fflush (stdout);
+
+ if (getline (&line, &len, stdin) < 0)
+ return 0;
+ /* Check for default */
+ if (line[0] == '\n') {
+ free(line);
+ return 0;
+ }
+ res = rpmatch(line);
+ if (res >= 0) {
+ free(line);
+ return res;
+ }
+ } while(1);
+ /* Never should get here */
+}
+
+static double
+uptime()
+{
+ char * savelocale;
+ char buf[2048];
+ FILE* file;
+ if (!(file=fopen( PROC_BASE "/uptime", "r"))) {
+ fprintf(stderr, "killall: error opening uptime file\n");
+ exit(1);
+ }
+ savelocale = setlocale(LC_NUMERIC,"C");
+ if (fscanf(file, "%2047s", buf) == EOF) perror("uptime");
+ fclose(file);
+ setlocale(LC_NUMERIC,savelocale);
+ return atof(buf);
+}
+
+/* process age from jiffies to seconds via uptime */
+static double process_age(const unsigned long long jf)
+{
+ double age;
+ double sc_clk_tck = sysconf(_SC_CLK_TCK);
+ assert(sc_clk_tck > 0);
+ age = uptime() - jf / sc_clk_tck;
+ if (age < 0L)
+ return 0L;
+ return age;
+}
+
+/* returns requested time interval in seconds,
+ negative indicates error has occurred
+ */
+static long
+parse_time_units(const char* age)
+{
+ char *unit;
+ long num;
+
+ num = strtol(age,&unit,10);
+ if (age == unit) /* no digits found */
+ return -1;
+ if (unit[0] == '\0') /* no units found */
+ return -1;
+
+ switch(unit[0]) {
+ case 's':
+ return num;
+ case 'm':
+ return (num * 60);
+ case 'h':
+ return (num * 60 * 60);
+ case 'd':
+ return (num * 60 * 60 * 24);
+ case 'w':
+ return (num * 60 * 60 * 24 * 7);
+ case 'M':
+ return (num * 60 * 60 * 24 * 7 * 4);
+ case 'y':
+ return (num * 60 * 60 * 24 * 7 * 4 * 12);
+ }
+ return -1;
+}
+
+enum ns_type {
+ IPCNS = 0,
+ MNTNS,
+ NETNS,
+ PIDNS,
+ USERNS,
+ UTSNS
+};
+
+static const char *ns_names[] = {
+ [IPCNS] = "ipc",
+ [MNTNS] = "mnt",
+ [NETNS] = "net",
+ [PIDNS] = "pid",
+ [USERNS] = "user",
+ [UTSNS] = "uts",
+};
+
+#define NUM_NS 6
+
+const char *get_ns_name(int id) {
+ if (id >= NUM_NS)
+ return NULL;
+ return ns_names[id];
+}
+
+static int get_ns(pid_t pid, int id) {
+ struct stat st;
+ char buff[50];
+ snprintf(buff, sizeof(buff), "/proc/%i/ns/%s", pid, get_ns_name(id));
+ if (stat(buff, &st))
+ return 0;
+ else
+ return st.st_ino;
+}
+
+static int
+match_process_uid(const int pidfd, uid_t uid)
+{
+ char buf[128];
+ uid_t puid;
+ FILE *f;
+ int fd;
+ int re = -1;
+
+ if ( (fd = openat(pidfd, "status", O_RDONLY, 0)) < 0)
+ return 0;
+ if (!(f = fdopen (fd, "r")))
+ {
+ close(fd);
+ return 0;
+ }
+
+ while (fgets(buf, sizeof buf, f))
+ {
+ if (sscanf (buf, "Uid:\t%d", &puid))
+ {
+ re = uid==puid;
+ break;
+ }
+ }
+ close(fd);
+ if (re==-1)
+ {
+ fprintf(stderr, _("killall: Cannot get UID from process status\n"));
+ exit(1);
+ }
+ return re;
+}
+
+/* Match on the given scontext to the process context
+ * Return 0 on a match
+ */
+static int
+match_process_context(const pid_t pid, const regex_t *scontext)
+{
+ static void (*my_freecon)(char*) = NULL;
+ static int (*my_getpidcon)(pid_t pid, char **context) = NULL;
+ static int selinux_enabled = 0;
+ char *lcontext;
+ int retval = 1;
+
+#ifdef WITH_SELINUX
+ static int tried_load = 0;
+ static int (*my_is_selinux_enabled)(void) = NULL;
+
+ if(!my_getpidcon && !tried_load){
+ void *handle = dlopen("libselinux.so.1", RTLD_NOW);
+ if(handle) {
+ my_freecon = dlsym(handle, "freecon");
+ if(dlerror())
+ my_freecon = NULL;
+ my_getpidcon = dlsym(handle, "getpidcon");
+ if(dlerror())
+ my_getpidcon = NULL;
+ my_is_selinux_enabled = dlsym(handle, "is_selinux_enabled");
+ if(dlerror())
+ my_is_selinux_enabled = 0;
+ else
+ selinux_enabled = my_is_selinux_enabled();
+ }
+ tried_load++;
+ }
+#endif /* WITH_SELINUX */
+
+ if (my_getpidcon && selinux_enabled && !my_getpidcon(pid, &lcontext)) {
+ retval = (regexec(scontext, lcontext, 0, NULL, 0) ==0);
+ my_freecon(lcontext);
+ } else {
+ FILE *file;
+ char path[50];
+ char readbuf[BUFSIZ+1];
+ snprintf(path, sizeof path, "/proc/%d/attr/current", pid);
+ if ( (file = fopen(path, "r")) != NULL) {
+ if (fgets(readbuf, BUFSIZ, file) != NULL) {
+ retval = (regexec(scontext, readbuf, 0, NULL, 0)==0);
+ }
+ fclose(file);
+ }
+ }
+ return retval;
+}
+
+static int
+my_send_signal(
+ const int pidfd,
+ const pid_t pid,
+ const int sig)
+{
+#ifdef __NR_pidfd_send_signal
+ if (pid > 0) /* Not PGID */
+ {
+ int ret = syscall(__NR_pidfd_send_signal, pidfd, sig, NULL, 0);
+ if (ret >= 0 || errno != ENOSYS)
+ return ret;
+ // fall through if no such syscall
+ }
+#endif
+ return kill(pid, sig);
+}
+
+static void
+free_regexp_list(regex_t *reglist, int names)
+{
+ int i;
+ for (i = 0; i < names; i++)
+ regfree(&reglist[i]);
+ free(reglist);
+}
+
+static regex_t *
+build_regexp_list(int names, char **namelist)
+{
+ int i;
+ regex_t *reglist;
+ int flag = REG_EXTENDED|REG_NOSUB;
+
+ if (!(reglist = malloc (sizeof (regex_t) * names)))
+ {
+ perror ("malloc");
+ exit (1);
+ }
+
+ if (ignore_case)
+ flag |= REG_ICASE;
+
+ for (i = 0; i < names; i++)
+ {
+ if (regcomp(&reglist[i], namelist[i], flag) != 0)
+ {
+ fprintf(stderr, _("killall: Bad regular expression: %s\n"), namelist[i]);
+ free_regexp_list(reglist, i);
+ exit (1);
+ }
+ }
+ return reglist;
+}
+
+static NAMEINFO *
+build_nameinfo(const int names, char **namelist)
+{
+ int i;
+ NAMEINFO *ni = NULL;
+ if ( (ni = malloc(sizeof(NAMEINFO) * names)) == NULL)
+ return NULL;
+
+ for (i = 0; i < names; i++)
+ {
+ ni[i].name = namelist[i];
+ ni[i].st.st_dev = 0;
+ if (!strchr (namelist[i], '/'))
+ {
+ ni[i].name_length = strlen (namelist[i]);
+ }
+ else if (stat (namelist[i], &(ni[i].st)) < 0)
+ {
+ perror (namelist[i]);
+ free(ni);
+ return NULL;
+ }
+ }
+ return ni;
+}
+
+static int
+load_process_name_and_age(char *comm, double *process_age_sec,
+ const int pidfd, int load_age)
+{
+ int fd;
+ FILE *file;
+ char buf[1024];
+ char *startcomm, *endcomm;
+ unsigned lencomm;
+ *process_age_sec = 0;
+
+ if ( (fd = openat(pidfd, "stat", O_RDONLY, 0)) < 0)
+ return -1;
+ if (!(file = fdopen (fd, "r")))
+ {
+ close(fd);
+ return -1;
+ }
+ if (fgets(buf, 1024, file) == NULL)
+ {
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ if ( NULL == ( startcomm = strchr(buf, '(')))
+ return -1;
+ startcomm++;
+ if ( NULL == ( endcomm = strrchr(startcomm, ')')))
+ return -1;
+ lencomm = endcomm - startcomm;
+ if (lencomm > COMM_LEN -1)
+ lencomm = COMM_LEN -1;
+ strncpy(comm, startcomm, lencomm);
+ comm[lencomm] = '\0';
+
+ endcomm += 2; // skip ") "
+ if (load_age)
+ {
+ unsigned long long proc_stt_jf = 0;
+ if (sscanf(endcomm, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %Lu",
+ &proc_stt_jf) != 1)
+ {
+ return -1;
+ }
+ *process_age_sec = process_age(proc_stt_jf);
+ }
+ return lencomm;
+}
+
+static int
+load_proc_cmdline(const int pidfd, const pid_t pid, const char *comm, const int check_comm_length, char **command, int *got_long)
+{
+ FILE *file;
+ int fp;
+ char *p, *command_buf;
+ int cmd_size = 128;
+ int okay;
+
+ if ( (fp = openat(pidfd, "cmdline", O_RDONLY, 0)) < 0)
+ return -1;
+
+ if (!(file = fdopen (fp, "r")))
+ {
+ close(fp);
+ return -1;
+ }
+
+ if ( (command_buf = (char *)malloc (cmd_size)) == NULL)
+ exit(1);
+
+ while (1)
+ {
+ /* look for actual command so we skip over initial "sh" if any */
+
+ /* 'cmdline' has arguments separated by nulls */
+ for (p=command_buf; ; p++)
+ {
+ int c;
+ if (p == (command_buf + cmd_size))
+ {
+ char *new_command_buf;
+ int cur_size = cmd_size;
+ cmd_size *= 2;
+ new_command_buf = (char *)realloc(command_buf, cmd_size);
+ if (!new_command_buf) {
+ if (command_buf)
+ free(command_buf);
+ exit (1);
+ }
+ command_buf = new_command_buf;
+ p = command_buf + cur_size;
+ }
+ c = fgetc(file);
+ if (c == EOF || c == '\0')
+ {
+ *p = '\0';
+ break;
+ } else {
+ *p = c;
+ }
+ }
+ if (strlen(command_buf) == 0) {
+ okay = 0;
+ break;
+ }
+ p = strrchr(command_buf,'/');
+ p = p ? p+1 : command_buf;
+ if (strncmp(p, comm, check_comm_length) == 0) {
+ okay = 1;
+ if (!(*command = strdup(p))) {
+ free(command_buf);
+ exit(1);
+ }
+ break;
+ }
+ }
+ (void) close(fp);
+ free(command_buf);
+ command_buf = NULL;
+
+ if (exact && !okay)
+ {
+ if (verbose)
+ fprintf (stderr, _("killall: skipping partial match %s(%d)\n"),
+ comm, pid);
+ *got_long = okay;
+ return -1;
+ }
+ *got_long = okay;
+ return 0;
+}
+
+static pid_t *
+create_pid_table(int *max_pids, int *pids)
+{
+ pid_t self, *pid_table, *realloc_pid_table;
+ int pid;
+ DIR *dir;
+ struct dirent *de;
+
+ self = getpid ();
+ if (!(dir = opendir (PROC_BASE)))
+ {
+ perror (PROC_BASE);
+ exit (1);
+ }
+ *max_pids = 256;
+ pid_table = malloc (*max_pids * sizeof (pid_t));
+ if (!pid_table)
+ {
+ perror ("malloc");
+ exit (1);
+ }
+ *pids = 0;
+ while ( (de = readdir (dir)) != NULL)
+ {
+ if (!(pid = (pid_t) atoi (de->d_name)) || pid == self)
+ continue;
+ if (*pids == *max_pids)
+ {
+ if (!(realloc_pid_table = realloc (pid_table, 2 * *pids * sizeof (pid_t))))
+ {
+ perror ("realloc");
+ free(pid_table);
+ exit (1);
+ }
+ pid_table = realloc_pid_table;
+ *max_pids *= 2;
+ }
+ pid_table[(*pids)++] = pid;
+ }
+ (void) closedir (dir);
+ return pid_table;
+}
+
+#define strcmp2(A,B,I) (I? strcasecmp((A),(B)):strcmp((A),(B)))
+#define strncmp2(A,B,L,I) (I? strncasecmp((A),(B),(L)):strncmp((A),(B),(L)))
+static int match_process_name(
+ const char *proc_comm,
+ const int comm_len,
+ const char *proc_cmdline,
+ const char *match_name,
+ const int match_len,
+ const int got_long
+ )
+{
+ /* process is old length but matching longer */
+ if (comm_len == OLD_COMM_LEN - 1 && match_len >= OLD_COMM_LEN - 1)
+ {
+ if (got_long)
+ {
+ return (0 == strcmp2 (match_name, proc_cmdline, ignore_case));
+ } else {
+ return (0 == strncmp2 (match_name, proc_comm, OLD_COMM_LEN - 1,
+ ignore_case));
+ }
+ }
+
+ if (comm_len == COMM_LEN - 1 && match_len >= COMM_LEN - 1)
+ {
+ if (got_long)
+ {
+ return (0 == strcmp2 (match_name, proc_cmdline, ignore_case));
+ } else {
+ return (0 == strncmp2 (match_name, proc_comm, COMM_LEN - 1,
+ ignore_case));
+ }
+ }
+ /* Not old new COMM_LEN so we match all of it */
+ if (got_long)
+ {
+ return (0 == strcmp2 (match_name, proc_cmdline, ignore_case));
+ }
+ return (0 == strcmp2 (match_name, proc_comm, ignore_case));
+}
+
+static int
+kill_all(int signal, int name_count, char **namelist, struct passwd *pwent,
+ regex_t *scontext )
+{
+ struct stat st;
+ NAMEINFO *name_info = NULL;
+ char comm[COMM_LEN];
+ char *command = NULL;
+ pid_t *pid_table, *pid_killed;
+ pid_t *pgids = NULL;
+ int i, j, length, got_long, error;
+ int pids, max_pids, pids_killed;
+ int pidfd = 0;
+ unsigned long found;
+ regex_t *reglist = NULL;
+ long ns_ino = 0;
+
+ if (opt_ns_pid)
+ ns_ino = get_ns(opt_ns_pid, PIDNS);
+
+ if (name_count && reg)
+ reglist = build_regexp_list(name_count, namelist);
+ else
+ if ( (name_info = build_nameinfo(name_count, namelist)) == NULL)
+ exit(1);
+
+ pid_table = create_pid_table(&max_pids, &pids);
+ found = 0;
+ pids_killed = 0;
+ pid_killed = malloc (max_pids * sizeof (pid_t));
+ if (!pid_killed)
+ {
+ perror ("malloc");
+ exit (1);
+ }
+ if (process_group)
+ {
+ pgids = calloc (pids, sizeof (pid_t));
+ if (!pgids)
+ {
+ perror ("malloc");
+ exit (1);
+ }
+ }
+ got_long = 0;
+ for (i = 0; i < pids; i++)
+ {
+ pid_t id;
+ int found_name = -1;
+ double process_age_sec = 0;
+ char pidpath[256];
+
+ /* Open PID directory */
+ if (pidfd > 0)
+ close(pidfd);
+ snprintf (pidpath, sizeof pidpath, PROC_BASE "/%d", pid_table[i]);
+ if ( (pidfd = open(pidpath, O_RDONLY|O_DIRECTORY)) < 0)
+ continue;
+ /* match by UID */
+ if (pwent && match_process_uid(pidfd, pwent->pw_uid)==0)
+ continue;
+ if (opt_ns_pid && ns_ino && ns_ino != get_ns(pid_table[i], PIDNS))
+ continue;
+
+ if (scontext && match_process_context(pid_table[i], scontext) == 0)
+ continue;
+
+ length = load_process_name_and_age(comm, &process_age_sec, pidfd, (younger_than||older_than));
+ if (length < 0)
+ continue;
+
+ /* test for process age, if required */
+ if ( younger_than && (process_age_sec > younger_than ) )
+ continue;
+ if ( older_than && (process_age_sec < older_than ) )
+ continue;
+
+ got_long = 0;
+ if (command) {
+ free(command);
+ command = NULL;
+ }
+
+ if (length == COMM_LEN - 1 || length == OLD_COMM_LEN - 1)
+ if (load_proc_cmdline(pidfd, pid_table[i], comm, length, &command, &got_long) < 0)
+ continue;
+
+ /* match by process name */
+ for (j = 0; j < name_count; j++)
+ {
+ if (reg)
+ {
+ if (regexec (&reglist[j], got_long ? command : comm, 0, NULL, 0) != 0)
+ continue;
+ }
+ else /* non-regex */
+ {
+ if (!name_info[j].st.st_dev)
+ {
+ if (!match_process_name(comm, length, command, namelist[j],
+ name_info[j].name_length, got_long))
+ continue;
+
+ } else {
+ int ok = 1;
+ if (fstatat(pidfd, "exe", &st, 0) < 0)
+ ok = 0;
+ else if (name_info[j].st.st_dev != st.st_dev ||
+ name_info[j].st.st_ino != st.st_ino)
+ {
+ /* maybe the binary has been modified and std[j].st_ino
+ * is not reliable anymore. We need to compare paths.
+ */
+ size_t len = strlen(namelist[j]);
+ char *linkbuf = malloc(len + 1);
+
+ if (!linkbuf ||
+ readlinkat(pidfd, "exe", linkbuf, len + 1) != (ssize_t)len ||
+ memcmp(namelist[j], linkbuf, len))
+ ok = 0;
+ free(linkbuf);
+ }
+ if (!ok)
+ continue;
+ }
+ } /* non-regex */
+ found_name = j;
+ break;
+ }
+ if (name_count && found_name==-1)
+ continue; /* match by process name faild */
+
+ /* check for process group */
+ if (!process_group)
+ id = pid_table[i];
+ else
+ {
+ int j;
+
+ id = getpgid (pid_table[i]);
+ pgids[i] = id;
+ if (id < 0)
+ {
+ fprintf (stderr, "killall: getpgid(%d): %s\n",
+ pid_table[i], strerror (errno));
+ }
+ for (j = 0; j < i; j++)
+ if (pgids[j] == id)
+ break;
+ if (j < i)
+ continue;
+ }
+ if (interactive && !ask (comm, id, signal))
+ continue;
+ if (my_send_signal (pidfd, process_group ? -id : id, signal) >= 0)
+ {
+ if (verbose)
+ fprintf (stderr, _("Killed %s(%s%d) with signal %d\n"), got_long ? command :
+ comm, process_group ? "pgid " : "", id, signal);
+ if (found_name >= 0)
+ /* mark item of namelist */
+ found |= 1UL << found_name;
+ pid_killed[pids_killed++] = id;
+ }
+ else if (errno != ESRCH || interactive)
+ fprintf (stderr, "%s(%d): %s\n", got_long ? command :
+ comm, id, strerror (errno));
+ }
+ if (command)
+ free(command);
+ if (reglist)
+ free_regexp_list(reglist, name_count);
+ free(pgids);
+ if (pidfd > 0)
+ close(pidfd);
+ if (!quiet)
+ for (i = 0; i < name_count; i++)
+ if (!(found & (1UL << i)))
+ fprintf (stderr, _("%s: no process found\n"), namelist[i]);
+ if (name_count)
+ /* killall returns a zero return code if at least one process has
+ * been killed for each listed command. */
+ error = found == ((1UL << (name_count - 1)) | ((1UL << (name_count - 1)) - 1)) ? 0 : 1;
+ else
+ /* in nameless mode killall returns a zero return code if at least
+ * one process has killed */
+ error = pids_killed ? 0 : 1;
+ /*
+ * We scan all (supposedly) killed processes every second to detect dead
+ * processes as soon as possible in order to limit problems of race with
+ * PID re-use.
+ */
+ while (pids_killed && wait_until_dead)
+ {
+ for (i = 0; i < pids_killed;)
+ {
+ if (kill (process_group ? -pid_killed[i] : pid_killed[i], 0) < 0 &&
+ errno == ESRCH)
+ {
+ pid_killed[i] = pid_killed[--pids_killed];
+ continue;
+ }
+ i++;
+ }
+ sleep (1); /* wait a bit longer */
+ }
+ free(pid_killed);
+ free(pid_table);
+ free(name_info);
+ return error;
+}
+
+
+static void
+usage (const char *msg)
+{
+ if (msg != NULL)
+ fprintf(stderr, "%s\n", msg);
+ fprintf(stderr, _(
+ "Usage: killall [OPTION]... [--] NAME...\n"));
+ fprintf(stderr, _(
+ " killall -l, --list\n"
+ " killall -V, --version\n\n"
+ " -e,--exact require exact match for very long names\n"
+ " -I,--ignore-case case insensitive process name match\n"
+ " -g,--process-group kill process group instead of process\n"
+ " -y,--younger-than kill processes younger than TIME\n"
+ " -o,--older-than kill processes older than TIME\n"
+ " -i,--interactive ask for confirmation before killing\n"
+ " -l,--list list all known signal names\n"
+ " -q,--quiet don't print complaints\n"
+ " -r,--regexp interpret NAME as an extended regular expression\n"
+ " -s,--signal SIGNAL send this signal instead of SIGTERM\n"
+ " -u,--user USER kill only process(es) running as USER\n"
+ " -v,--verbose report if the signal was successfully sent\n"
+ " -V,--version display version information\n"
+ " -w,--wait wait for processes to die\n"
+ " -n,--ns PID match processes that belong to the same namespaces\n"
+ " as PID\n"));
+
+ fprintf(stderr, _(
+ " -Z,--context REGEXP kill only process(es) having context\n"
+ " (must precede other arguments)\n"));
+ fputc('\n', stderr);
+ exit(1);
+}
+
+
+void print_version()
+{
+ fprintf(stderr, "killall (PSmisc) %s\n", VERSION);
+ fprintf(stderr, _(
+ "Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n\n"));
+ fprintf(stderr, _(
+ "PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+ "This is free software, and you are welcome to redistribute it under\n"
+ "the terms of the GNU General Public License.\n"
+ "For more information about these matters, see the files named COPYING.\n"));
+}
+
+static int
+have_proc_self_stat (void)
+{
+ char filename[128];
+ struct stat isproc;
+ pid_t pid = getpid();
+
+ snprintf(filename, sizeof(filename), PROC_BASE"/%d/stat", (int) pid);
+ return stat(filename, &isproc) == 0;
+}
+
+int
+main (int argc, char **argv)
+{
+ char *name;
+ int sig_num;
+ int optc;
+ int myoptind;
+ int skip_error=0;
+ struct passwd *pwent = NULL;
+ char yt[COMM_LEN];
+ char ot[COMM_LEN];
+
+ //int optsig = 0;
+
+ struct option options[] = {
+ {"exact", 0, NULL, 'e'},
+ {"ignore-case", 0, NULL, 'I'},
+ {"process-group", 0, NULL, 'g'},
+ {"younger-than", 1, NULL, 'y'},
+ {"older-than", 1, NULL, 'o'},
+ {"interactive", 0, NULL, 'i'},
+ {"list-signals", 0, NULL, 'l'},
+ {"quiet", 0, NULL, 'q'},
+ {"regexp", 0, NULL, 'r'},
+ {"signal", 1, NULL, 's'},
+ {"user", 1, NULL, 'u'},
+ {"verbose", 0, NULL, 'v'},
+ {"wait", 0, NULL, 'w'},
+ {"ns", 1, NULL, 'n' },
+ {"context", 1, NULL, 'Z'},
+ {"version", 0, NULL, 'V'},
+ {0,0,0,0 }};
+
+
+ /* Setup the i18n */
+#ifdef ENABLE_NLS
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+#endif
+ char *scontext = NULL;
+ regex_t scontext_reg;
+
+ if ( argc < 2 ) usage(NULL); /* do the obvious thing... */
+
+ name = strrchr (*argv, '/');
+ if (name)
+ name++;
+ else
+ name = *argv;
+ sig_num = SIGTERM;
+
+
+ opterr = 0;
+ while ( (optc = getopt_long_only(argc,argv,"egy:o:ilqrs:u:vwZ:VIn:",options,NULL)) != -1) {
+ switch (optc) {
+ case 'e':
+ exact = 1;
+ break;
+ case 'g':
+ process_group = 1;
+ break;
+ case 'y':
+ strncpy(yt, optarg, sizeof yt -1);
+ yt[sizeof yt -1] = '\0';
+ if ( 0 >= (younger_than = parse_time_units(yt) ) )
+ usage(_("Invalid time format"));
+ break;
+ case 'o':
+ strncpy(ot, optarg, sizeof ot - 1);
+ ot[sizeof ot -1] = '\0';
+ if ( 0 >= (older_than = parse_time_units(ot) ) )
+ usage(_("Invalid time format"));
+ break;
+ case 'i':
+ interactive = 1;
+ break;
+ case 'l':
+ list_signals();
+ return 0;
+ break;
+ case 'q':
+ quiet = 1;
+ break;
+ case 'r':
+ reg = 1;
+ break;
+ case 's':
+ sig_num = get_signal (optarg, "killall");
+ break;
+ case 'u':
+ if (!(pwent = getpwnam(optarg))) {
+ fprintf (stderr, _("Cannot find user %s\n"), optarg);
+ exit (1);
+ }
+ break;
+ case 'v':
+ verbose = 1;
+ break;
+ case 'w':
+ wait_until_dead = 1;
+ break;
+ case 'I':
+ /* option check is optind-1 but sig name is optind */
+ if (strcmp(argv[optind-1],"-I") == 0 || strncmp(argv[optind-1],"--",2) == 0) {
+ ignore_case = 1;
+ } else {
+ sig_num = get_signal (argv[optind]+1, "killall");
+ skip_error=optind;
+ }
+ break;
+ case 'V':
+ /* option check is optind-1 but sig name is optind */
+ if (strcmp(argv[optind-1],"-V") == 0 || strncmp(argv[optind-1],"--",2) == 0) {
+ print_version();
+ return 0;
+ } else {
+ sig_num = get_signal (argv[optind]+1, "killall");
+ skip_error=optind;
+ }
+ break;
+ case 'n': {
+ long num;
+ char *end = NULL;
+ errno = 0;
+ num = strtol(optarg, &end, 10);
+ if (errno != 0 || optarg == end || end == NULL)
+ usage(_("Invalid namespace PID"));
+ opt_ns_pid = (pid_t) num;
+ }
+ break;
+ case 'Z':
+ scontext=optarg;
+ if (regcomp(&scontext_reg, scontext, REG_EXTENDED|REG_NOSUB) != 0) {
+ fprintf(stderr, _("Bad regular expression: %s\n"), scontext);
+ exit (1);
+ }
+ break;
+ case '?':
+ if (skip_error == optind)
+ break;
+ /* Sigh, this is a hack because -ve could be -version or
+ * -verbose */
+ if (strncmp(argv[optind-1], "-ve", 3) == 0) {
+ verbose=1;
+ exact=1;
+ break;
+ }
+ /* Signal names are in uppercase, so check to see if the argv
+ * is upper case */
+ if (argv[optind-1][1] >= 'A' && argv[optind-1][1] <= 'Z') {
+ sig_num = get_signal (argv[optind-1]+1, "killall");
+ } else {
+ /* Might also be a -## signal too */
+ if (argv[optind-1][1] >= '0' && argv[optind-1][1] <= '9') {
+ sig_num = atoi(argv[optind-1]+1);
+ } else {
+ usage(NULL);
+ }
+ }
+ break;
+ }
+ }
+ myoptind = optind;
+ if ((argc - myoptind < 1) && pwent==NULL && scontext==NULL)
+ usage(NULL);
+
+ if (argc - myoptind > MAX_NAMES) {
+ fprintf (stderr, _("killall: Maximum number of names is %d\n"),
+ MAX_NAMES);
+ exit (1);
+ }
+ if (!have_proc_self_stat()) {
+ fprintf (stderr, _("killall: %s lacks process entries (not mounted ?)\n"),
+ PROC_BASE);
+ exit (1);
+ }
+ argv = argv + myoptind;
+ return kill_all(sig_num,argc - myoptind, argv, pwent,
+ scontext ? &scontext_reg : NULL);
+ }
diff --git a/src/lists.h b/src/lists.h
new file mode 100644
index 0000000..bd371a4
--- /dev/null
+++ b/src/lists.h
@@ -0,0 +1,373 @@
+/*
+ * lists.h Simple doubly linked list implementation, based on
+ * <linux/list.h>, <linux/prefetch.h>, and lib/list_sort.c
+ *
+ * Version: 0.2 11-Dec-2012 Fink
+ *
+ * Copyright 2011,2012 Werner Fink, 2005,2012 SUSE LINUX Products GmbH, Germany.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Author: Werner Fink <werner@suse.de>, 2011
+ */
+
+#ifndef _LISTS_H
+#define _LISTS_H
+
+#include <stddef.h>
+#include <sys/types.h>
+
+typedef enum _boolean {false, true} boolean;
+typedef unsigned char uchar;
+#ifndef __USE_MISC
+typedef unsigned short ushort;
+typedef unsigned int uint;
+#endif
+
+#ifndef __OPTIMIZE__
+# warning This will not compile without -O at least
+#endif
+#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
+# ifndef inline
+# define inline __inline__
+# endif
+# ifndef restrict
+# define restrict __restrict__
+# endif
+# ifndef volatile
+# define volatile __volatile__
+# endif
+# ifndef asm
+# define asm __asm__
+# endif
+# ifndef extension
+# define extension __extension__
+# endif
+#endif
+#ifndef attribute
+# define attribute(attr) __attribute__(attr)
+#endif
+
+/*
+ * This is lent from the kernel by e.g. using
+ *
+ * echo '#include <asm-i386/processor.h>\nint main () { prefetch(); return 0; }' | \
+ * gcc -I/usr/src/linux/include -D__KERNEL__ -x c -E -P - | \
+ * sed -rn '/void[[:blank:]]+prefetch[[:blank:]]*\(/,/^}/p'
+ *
+ * on the appropriate architecture (here on i686 for i586).
+ */
+extern inline void attribute((used,__gnu_inline__,always_inline,__artificial__)) prefetch(const void *restrict x)
+{
+#if defined(__x86_64__)
+ asm volatile ("prefetcht0 %0" :: "m" (*(unsigned long *)x))
+#elif defined(__ia64__)
+ asm volatile ("lfetch [%0]" :: "r" (x))
+#elif defined(__powerpc64__)
+ asm volatile ("dcbt 0,%0" :: "r" (x))
+#elif !defined(__CYGWIN__) && !defined(__PIC__) && defined(__i386__)
+ asm volatile ("661:\n\t"
+ ".byte 0x8d,0x74,0x26,0x00\n"
+ "\n662:\n"
+ ".section .altinstructions,\"a\"\n"
+ " .align 4\n"
+ " .long 661b\n"
+ " .long 663f\n"
+ " .byte %c0\n"
+ " .byte 662b-661b\n"
+ " .byte 664f-663f\n"
+ ".previous\n"
+ ".section .altinstr_replacement,\"ax\"\n"
+ " 663:\n\t"
+ " prefetchnta (%1)"
+ " \n664:\n"
+ ".previous"
+ :: "i" ((0*32+25)), "r" (x))
+#else
+ __builtin_prefetch ((x), 0, 1);
+#endif
+ ;
+}
+
+#if defined(DEBUG) && (DEBUG > 0)
+# define __align attribute((packed))
+#else
+# define __align attribute((aligned(sizeof(struct list_struct*))))
+#endif
+#define __packed attribute((packed))
+
+#define alignof(type) ((sizeof(type)+(sizeof(void*)-1)) & ~(sizeof(void*)-1))
+#define strsize(string) ((strlen(string)+1)*sizeof(char))
+
+typedef struct list_struct {
+ struct list_struct * next, * prev;
+} __align list_t;
+
+/*
+ * Linked list handling
+ * ====================
+ * The structures which will be linked into such lists have to be of the
+ * same type. The structures may have alway a list identifier of the type
+ * `list_t' as very first element. With this the macro list_entry() can
+ * be used to cast the memory address of a list member to the corresponding
+ * allocated structure.
+ */
+
+/*
+ * Insert new entry as next member.
+ */
+static inline void _insert(list_t *restrict new, list_t *restrict here) attribute((always_inline,nonnull(1,2)));
+static inline void _insert(list_t *restrict new, list_t *restrict here)
+{
+ list_t * prev = here;
+ list_t * next = here->next;
+
+ next->prev = new;
+ new->next = next;
+ new->prev = prev;
+ prev->next = new;
+}
+
+#define insert(new, list) _insert(&((new)->this), (&(list)));
+#define append(new, list) _insert(&((new)->this), (&(list))->prev);
+
+/*
+ * Set head
+ */
+static inline void initial(list_t *restrict head) attribute((always_inline,nonnull(1)));
+static inline void initial(list_t *restrict head)
+{
+ head->prev = head->next = head;
+}
+
+/*
+ * Remove entries, note that the pointer its self remains.
+ */
+static inline void delete(list_t *restrict entry) attribute((always_inline,nonnull(1)));
+static inline void delete(list_t *restrict entry)
+{
+ list_t * prev = entry->prev;
+ list_t * next = entry->next;
+
+ next->prev = prev;
+ prev->next = next;
+
+ initial(entry);
+}
+
+/*
+ * Replace an entry by a new one.
+ */
+static inline void replace(list_t *restrict old, list_t *restrict new) attribute((always_inline,nonnull(1,2)));
+static inline void replace(list_t *restrict old, list_t *restrict new)
+{
+ new->next = old->next;
+ new->next->prev = new;
+ new->prev = old->prev;
+ new->prev->next = new;
+}
+
+static inline void join(list_t *restrict list, list_t *restrict head) attribute((always_inline,nonnull(1,2)));
+static inline void join(list_t *restrict list, list_t *restrict head)
+{
+ list_t * first = list->next;
+
+ if (first != list) {
+ list_t * last = list->prev;
+ list_t * at = head->next;
+
+ first->prev = head;
+ head->next = first;
+
+ last->next = at;
+ at->prev = last;
+ }
+}
+
+static inline boolean list_empty(const list_t *restrict const head) attribute((always_inline,nonnull(1)));
+static inline boolean list_empty(const list_t *restrict const head)
+{
+ return head->next == head;
+}
+
+static inline void move_head(list_t *restrict entry, list_t *restrict head) attribute((always_inline,nonnull(1,2)));
+static inline void move_head(list_t *restrict entry, list_t *restrict head)
+{
+ list_t * prev = entry->prev;
+ list_t * next = entry->next;
+
+ next->prev = prev; /* remove entry from old list */
+ prev->next = next;
+
+ prev = head;
+ next = head->next;
+
+ next->prev = entry; /* and add it at head of new list */
+ entry->next = next;
+ entry->prev = prev;
+ prev->next = entry;
+}
+
+static inline void move_tail(list_t *restrict entry, list_t *restrict head) attribute((always_inline,nonnull(1,2)));
+static inline void move_tail(list_t *restrict entry, list_t *restrict head)
+{
+ list_t * prev = entry->prev;
+ list_t * next = entry->next;
+
+ next->prev = prev; /* remove entry from old list */
+ prev->next = next;
+
+ prev = head->prev;
+ next = head;
+
+ next->prev = entry; /* and add it at tail of new list */
+ entry->next = next;
+ entry->prev = prev;
+ prev->next = entry;
+}
+
+/*
+ * The handle of the list is named `this'
+ */
+#define list_entry(ptr, type) (__extension__ ({ \
+ const typeof( ((type *)0)->this ) *__mptr = (ptr); \
+ ((type *)( (char *)(__mptr) - offsetof(type,this) )); }))
+#define list_for_each(pos, head) \
+ for (pos = (head)->next; prefetch(pos->next), pos != (head); pos = pos->next)
+#define np_list_for_each(pos, head) \
+ for (pos = (head)->next; pos != (head); pos = pos->next)
+#define list_for_each_safe(pos, safe, head) \
+ for (pos = (head)->next, safe = pos->next; pos != (head); pos = safe, safe = pos->next)
+#define list_for_each_prev(pos, head) \
+ for (pos = (head)->prev; prefetch(pos->prev), pos != (head); pos = pos->prev)
+#define np_list_for_each_prev(pos, head) \
+ for (pos = (head)->prev; pos != (head); pos = pos->prev)
+
+#define MAX_LIST_LENGTH_BITS 20
+
+/*
+ * Returns a list organized in an intermediate format suited
+ * to chaining of merge() calls: null-terminated, no reserved or
+ * sentinel head node, "prev" links not maintained.
+ */
+static inline list_t *merge(int (*cmp)(list_t *a, list_t *b), list_t *a, list_t *b)
+{
+ list_t head, *tail = &head;
+ while (a && b) {
+ /* if equal, take 'a' -- important for sort stability */
+ if ((*cmp)(a, b) <= 0) {
+ tail->next = a;
+ a = a->next;
+ } else {
+ tail->next = b;
+ b = b->next;
+ }
+ tail = tail->next;
+ }
+ tail->next = a ? a : b;
+ return head.next;
+}
+
+/*
+ * Combine final list merge with restoration of standard doubly-linked
+ * list structure. This approach duplicates code from merge(), but
+ * runs faster than the tidier alternatives of either a separate final
+ * prev-link restoration pass, or maintaining the prev links
+ * throughout.
+ */
+static inline void merge_and_restore_back_links(int (*cmp)(list_t *a, list_t *b), list_t *head, list_t *a, list_t *b)
+{
+ list_t *tail = head;
+
+ while (a && b) {
+ /* if equal, take 'a' -- important for sort stability */
+ if ((*cmp)(a, b) <= 0) {
+ tail->next = a;
+ a->prev = tail;
+ a = a->next;
+ } else {
+ tail->next = b;
+ b->prev = tail;
+ b = b->next;
+ }
+ tail = tail->next;
+ }
+ tail->next = a ? a : b;
+
+ do {
+ /*
+ * In worst cases this loop may run many iterations.
+ * Continue callbacks to the client even though no
+ * element comparison is needed, so the client's cmp()
+ * routine can invoke cond_resched() periodically.
+ */
+ (*cmp)(tail->next, tail->next);
+
+ tail->next->prev = tail;
+ tail = tail->next;
+ } while (tail->next);
+
+ tail->next = head;
+ head->prev = tail;
+}
+
+
+/**
+ * list_sort - sort a list
+ * @head: the list to sort
+ * @cmp: the elements comparison function
+ *
+ * This function implements "merge sort", which has O(nlog(n))
+ * complexity.
+ *
+ * The comparison function @cmp must return a negative value if @a
+ * should sort before @b, and a positive value if @a should sort after
+ * @b. If @a and @b are equivalent, and their original relative
+ * ordering is to be preserved, @cmp must return 0.
+ */
+static inline void list_sort(list_t *head, int (*cmp)(list_t *a, list_t *b))
+{
+ list_t *part[MAX_LIST_LENGTH_BITS+1]; /* sorted partial lists
+ -- last slot is a sentinel */
+ size_t lev; /* index into part[] */
+ size_t max_lev = 0;
+ list_t *list;
+
+ if (list_empty(head))
+ return;
+
+ memset(part, 0, sizeof(part));
+
+ head->prev->next = NULL;
+ list = head->next;
+
+ while (list) {
+ list_t *cur = list;
+ list = list->next;
+ cur->next = NULL;
+
+ for (lev = 0; part[lev]; lev++) {
+ cur = merge(cmp, part[lev], cur);
+ part[lev] = NULL;
+ }
+ if (lev > max_lev) {
+ /* list passed to list_sort() too long for efficiency */
+ if (lev >= MAX_LIST_LENGTH_BITS)
+ lev--;
+ max_lev = lev;
+ }
+ part[lev] = cur;
+ }
+
+ for (lev = 0; lev < max_lev; lev++) {
+ if (part[lev])
+ list = merge(cmp, part[lev], list);
+ }
+
+ merge_and_restore_back_links(cmp, head, part[max_lev], list);
+}
+
+#endif /* _LISTS_H */
diff --git a/src/peekfd.c b/src/peekfd.c
new file mode 100644
index 0000000..36dff04
--- /dev/null
+++ b/src/peekfd.c
@@ -0,0 +1,466 @@
+/*
+ * peekfd.c - Intercept file descriptor read and writes
+ *
+ * Copyright (C) 2007 Trent Waddington <trent.waddington@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/ptrace.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/syscall.h>
+#include <asm/ptrace.h>
+#include <byteswap.h>
+#include <endian.h>
+#include <sys/user.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <ctype.h>
+#include <dirent.h>
+#include <stdint.h>
+#include <errno.h>
+#include <string.h>
+
+#include "i18n.h"
+
+#ifdef ARM64
+#include <sys/uio.h>
+#include <linux/elf.h>
+#endif
+
+#ifdef I386
+ #define REG_ORIG_ACCUM orig_eax
+ #define REG_ACCUM eax
+ #define REG_PARAM1 ebx
+ #define REG_PARAM2 ecx
+ #define REG_PARAM3 edx
+#elif X86_64
+ #define REG_ORIG_ACCUM orig_rax
+ #define REG_ACCUM rax
+ #define REG_PARAM1 rdi
+ #define REG_PARAM2 rsi
+ #define REG_PARAM3 rdx
+#elif PPC
+ #if !defined(__WORDSIZE)
+ #include <bits/reg.h>
+ #endif
+
+ #define REG_ORIG_ACCUM gpr[0]
+ #define REG_ACCUM gpr[3]
+ #define REG_PARAM1 orig_gpr3
+ #define REG_PARAM2 gpr[4]
+ #define REG_PARAM3 gpr[5]
+#ifndef PT_ORIG_R3
+ #define PT_ORIG_R3 34
+#endif
+#elif defined(ARM)
+#ifndef __ARM_EABI__
+#error arm oabi not supported
+#endif
+ #define REG_ORIG_ACCUM ARM_r7
+ #define REG_ACCUM ARM_r0
+ #define REG_PARAM1 ARM_ORIG_r0
+ #define REG_PARAM2 ARM_r1
+ #define REG_PARAM3 ARM_r2
+
+#elif defined(ARM64)
+ #define REG_ORIG_ACCUM regs[8]
+ #define REG_ACCUM regs[0]
+ #define REG_PARAM1 regs[0]
+ #define REG_PARAM2 regs[1]
+ #define REG_PARAM3 regs[2]
+
+
+
+#elif defined(MIPS)
+#ifndef MIPSEL
+#error only little endian supported
+#endif
+ #define REG_ORIG_ACCUM regs[3]
+ #define REG_ACCUM regs[2]
+ #define REG_PARAM1 regs[4]
+ #define REG_PARAM2 regs[5]
+ #define REG_PARAM3 regs[6]
+#elif defined(M68K)
+ #define REG_ORIG_ACCUM orig_d0
+ #define REG_ACCUM d0
+ #define REG_PARAM1 d1
+ #define REG_PARAM2 d2
+ #define REG_PARAM3 d3
+#endif
+
+#define MAX_ATTACHED_PIDS 1024
+int num_attached_pids = 0;
+pid_t attached_pids[MAX_ATTACHED_PIDS];
+int *fds = NULL;
+
+#ifdef ARM64
+struct user_pt_regs_node {
+ struct user_pt_regs regs;
+ struct user_pt_regs_node *user_pt_regs_next;
+};
+
+void user_pt_regs_insert(struct user_pt_regs_node** user_pt_regs_head, struct user_pt_regs *regs)
+{
+ struct user_pt_regs_node* new_node =
+ (struct user_pt_regs_node*) malloc(sizeof(struct user_pt_regs_node));
+
+ memcpy(&new_node->regs, regs, sizeof(struct user_pt_regs));
+ new_node->user_pt_regs_next = (*user_pt_regs_head);
+ (*user_pt_regs_head) = new_node;
+}
+
+struct user_pt_regs * user_pt_regs_search(struct user_pt_regs_node** user_pt_regs_head, struct user_pt_regs *regs)
+{
+ struct user_pt_regs_node* current = *user_pt_regs_head;
+ while (current != NULL)
+ {
+ if ((current->regs.REG_ORIG_ACCUM == regs->REG_ORIG_ACCUM) && (current->regs.REG_PARAM2 == regs->REG_PARAM2))
+ return &current->regs;
+ current = current->user_pt_regs_next;
+ }
+ return NULL;
+}
+
+
+int user_pt_regs_delete(struct user_pt_regs_node** user_pt_regs_head, struct user_pt_regs *regs)
+{
+ struct user_pt_regs_node* temp = *user_pt_regs_head, *prev;
+
+ if (temp != NULL && (&temp->regs == regs))
+ {
+ *user_pt_regs_head = temp->user_pt_regs_next;
+ free(temp);
+ return 0;
+ }
+
+ while (temp != NULL && (&temp->regs != regs))
+ {
+ prev = temp;
+ temp = temp->user_pt_regs_next;
+ }
+
+ if (temp == NULL) return -1;
+ prev->user_pt_regs_next = temp->user_pt_regs_next;
+ free(temp);
+ return 0;
+}
+#endif
+
+void detach(int signum) {
+ int i;
+ for (i = 0; i < num_attached_pids; i++)
+ ptrace(PTRACE_DETACH, attached_pids[i], 0, 0);
+ if (fds)
+ free(fds);
+ signal(SIGINT, SIG_DFL);
+ raise(SIGINT);
+}
+
+void attach(pid_t pid) {
+ if (num_attached_pids >= MAX_ATTACHED_PIDS)
+ return;
+ attached_pids[num_attached_pids] = pid;
+ if (ptrace(PTRACE_ATTACH, pid, 0, 0) == -1) {
+ fprintf(stderr, _("Error attaching to pid %i\n"), pid);
+ return;
+ }
+ num_attached_pids++;
+}
+
+void print_version()
+{
+ fprintf(stderr, _("peekfd (PSmisc) %s\n"), VERSION);
+ fprintf(stderr, _(
+ "Copyright (C) 2007 Trent Waddington\n\n"));
+ fprintf(stderr, _(
+ "PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+ "This is free software, and you are welcome to redistribute it under\n"
+ "the terms of the GNU General Public License.\n"
+ "For more information about these matters, see the files named COPYING.\n"));
+}
+
+void usage() {
+ fprintf(stderr, _(
+ "Usage: peekfd [-8] [-n] [-c] [-d] [-V] [-h] <pid> [<fd> ..]\n"
+ " -8, --eight-bit-clean output 8 bit clean streams.\n"
+ " -n, --no-headers don't display read/write from fd headers.\n"
+ " -c, --follow peek at any new child processes too.\n"
+ " -t, --tgid peek at all threads where tgid equals <pid>.\n"
+ " -d, --duplicates-removed remove duplicate read/writes from the output.\n"
+ " -V, --version prints version info.\n"
+ " -h, --help prints this help.\n"
+ "\n"
+ " Press CTRL-C to end output.\n"));
+}
+
+int bufdiff(pid_t pid, unsigned char *lastbuf, unsigned long addr, unsigned long len) {
+ unsigned long i;
+ for (i = 0; i < len; i++)
+ if (lastbuf[i] != (ptrace(PTRACE_PEEKTEXT, pid, addr + i, 0) & 0xff))
+ return 1;
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ int eight_bit_clean = 0;
+ int no_headers = 0;
+ int follow_forks = 0;
+ int follow_clones = 0;
+ int tgid = 0;
+ int remove_duplicates = 0;
+ int optc;
+ int target_pid = 0;
+ int numfds = 0;
+ int i;
+ unsigned long j;
+
+ struct option options[] = {
+ {"eight-bit-clean", 0, NULL, '8'},
+ {"no-headers", 0, NULL, 'n'},
+ {"follow", 0, NULL, 'c'},
+ {"tgid", 0, NULL, 't'},
+ {"duplicates-removed", 0, NULL, 'd'},
+ {"help", 0, NULL, 'h'},
+ {"version", 0, NULL, 'V'},
+ };
+
+ /* Setup the i18n */
+#ifdef ENABLE_NLS
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+#endif
+
+ if (argc < 2) {
+ usage();
+ return 1;
+ }
+
+ while ((optc = getopt_long(argc, argv, "8nctdhV", options, NULL)) != -1) {
+ switch(optc) {
+ case '8':
+ eight_bit_clean = 1;
+ break;
+ case 'n':
+ no_headers = 1;
+ break;
+ case 'c':
+ follow_forks = 1;
+ follow_clones = 1;
+ break;
+ case 't':
+ tgid = 1;
+ follow_clones = 1;
+ break;
+ case 'd':
+ remove_duplicates = 1;
+ break;
+ case 'V':
+ print_version();
+ return 1;
+ case 'h':
+ case '?':
+ usage();
+ return 1;
+ }
+ }
+ /* First arg off the options is the PID to see */
+ if (optind >= argc) {
+ usage();
+ return -1;
+ }
+ target_pid = atoi(argv[optind++]);
+
+ if (optind < argc) {
+ numfds = argc - optind;
+ fds = malloc(sizeof(int) * numfds);
+ for (i = 0; i < numfds; i++)
+ fds[i] = atoi(argv[optind + i]);
+ }
+
+ attach(target_pid);
+
+ if (tgid) {
+ DIR *taskdir;
+ struct dirent *dt;
+ char taskpath[24];
+
+ snprintf(taskpath, 24, "/proc/%d/task", target_pid);
+
+ if ((taskdir = opendir(taskpath)) != 0) {
+ while ((dt = readdir(taskdir)) != NULL) {
+ int thread = atoi(dt->d_name);
+ if ((thread != 0) && (thread != target_pid))
+ attach(thread);
+ }
+ closedir(taskdir);
+ }
+ }
+
+ if (num_attached_pids == 0)
+ return 1;
+
+ signal(SIGINT, detach);
+
+ for (i = 0; i < num_attached_pids; i++)
+ ptrace(PTRACE_SYSCALL, attached_pids[i], 0, 0);
+
+ /*int count = 0;*/
+ int lastfd = numfds > 0 ? fds[0] : 0;
+ int lastdir = 3;
+ unsigned char *lastbuf = NULL;
+ unsigned long last_buf_size = -1;
+
+#ifdef ARM64
+ struct user_pt_regs_node* user_pt_regs_head = NULL;
+#endif
+
+ for(;;) {
+ int status;
+ pid_t pid = wait(&status);
+ if (WIFSTOPPED(status)) {
+#ifdef PPC
+ struct pt_regs regs;
+ regs.gpr[0] = ptrace(PTRACE_PEEKUSER, pid, __WORDSIZE/8 * PT_R0, 0);
+ regs.gpr[3] = ptrace(PTRACE_PEEKUSER, pid, __WORDSIZE/8 * PT_R3, 0);
+ regs.gpr[4] = ptrace(PTRACE_PEEKUSER, pid, __WORDSIZE/8 * PT_R4, 0);
+ regs.gpr[5] = ptrace(PTRACE_PEEKUSER, pid, __WORDSIZE/8 * PT_R5, 0);
+ regs.orig_gpr3 = ptrace(PTRACE_PEEKUSER, pid, __WORDSIZE/8 * PT_ORIG_R3, 0);
+#elif defined(ARM)
+ struct pt_regs regs;
+ ptrace(PTRACE_GETREGS, pid, 0, &regs);
+
+#elif defined(ARM64)
+ struct user_pt_regs regs, *old_regs;
+ struct iovec io;
+ io.iov_base = &regs;
+ io.iov_len = sizeof(regs);
+
+ if (ptrace(PTRACE_GETREGSET, pid, (void*) NT_PRSTATUS, (void*) &io) == -1) {
+ printf("ARM64: PTRACE_GETREGSET: %s\n", strerror(errno));
+ return errno;
+ }
+
+#elif defined(MIPS)
+ struct pt_regs regs;
+ long pc = ptrace(PTRACE_PEEKUSER, pid, 64, 0);
+ regs.regs[2] = ptrace(PTRACE_PEEKUSER,pid,2,0);
+ regs.regs[3] = ptrace(PTRACE_PEEKTEXT, pid, pc - 8, 0) & 0xffff;
+ regs.regs[4] = ptrace(PTRACE_PEEKUSER,pid,4,0);
+ regs.regs[5] = ptrace(PTRACE_PEEKUSER,pid,5,0);
+ regs.regs[6] = ptrace(PTRACE_PEEKUSER,pid,6,0);
+#else
+ struct user_regs_struct regs;
+ ptrace(PTRACE_GETREGS, pid, 0, &regs);
+#endif
+ /*unsigned int b = ptrace(PTRACE_PEEKTEXT, pid, regs.eip, 0);*/
+
+#if defined(ARM64)
+ if (follow_forks && regs.REG_ORIG_ACCUM == SYS_clone) {
+#else
+ if ((follow_forks && regs.REG_ORIG_ACCUM == SYS_fork)
+ || (follow_clones && regs.REG_ORIG_ACCUM == SYS_clone)) {
+#endif
+ if (regs.REG_ACCUM > 0)
+ attach(regs.REG_ACCUM);
+ }
+ if ((regs.REG_ORIG_ACCUM == SYS_read || regs.REG_ORIG_ACCUM == SYS_write) && (regs.REG_PARAM3 == regs.REG_ACCUM)) {
+#ifdef ARM64
+ /* ARM64 doesn't expose orig_x0 to user space,
+ so retrive orig_x0 from older user pt regs */
+ old_regs = user_pt_regs_search(&user_pt_regs_head, &regs);
+ if (old_regs != NULL) {
+ regs.REG_PARAM1 = old_regs->REG_PARAM1;
+ user_pt_regs_delete(&user_pt_regs_head, old_regs);
+ }
+#endif
+ for (i = 0; i < numfds; i++)
+ if (fds[i] == (int)regs.REG_PARAM1)
+ break;
+ if (i != numfds || numfds == 0) {
+ if ((int)regs.REG_PARAM1 != lastfd || (int)regs.REG_ORIG_ACCUM != lastdir) {
+ lastfd = regs.REG_PARAM1;
+ lastdir = regs.REG_ORIG_ACCUM;
+ if (!no_headers) {
+ printf("\n%sing fd %i", regs.REG_ORIG_ACCUM == SYS_read ? "read" : "writ", lastfd);
+ if (tgid)
+ printf(" (thread %d)", pid);
+ printf(":\n");
+ }
+ }
+ if (!remove_duplicates || lastbuf == NULL
+ || last_buf_size != regs.REG_PARAM3 ||
+ bufdiff(pid, lastbuf, regs.REG_PARAM2, regs.REG_PARAM3)) {
+
+ if (remove_duplicates) {
+ if (lastbuf)
+ free(lastbuf);
+ if ( NULL == (lastbuf = malloc(regs.REG_PARAM3))) {
+ perror("lastbuf malloc");
+ exit(1);
+ }
+ last_buf_size = regs.REG_PARAM3;
+ }
+
+ for (j = 0; j < regs.REG_PARAM3; j++) {
+#if BYTE_ORDER == BIG_ENDIAN
+#if __WORDSIZE == 64
+ unsigned int a = bswap_64(ptrace(PTRACE_PEEKTEXT, pid, regs.REG_PARAM2 + j, 0));
+#else
+ unsigned int a = bswap_32(ptrace(PTRACE_PEEKTEXT, pid, regs.REG_PARAM2 + j, 0));
+#endif
+#else
+ unsigned int a = ptrace(PTRACE_PEEKTEXT, pid, regs.REG_PARAM2 + j, 0);
+#endif
+ if (remove_duplicates)
+ lastbuf[j] = a & 0xff;
+
+ if (eight_bit_clean)
+ putchar(a & 0xff);
+ else {
+ if (isprint(a & 0xff) || (a & 0xff) == '\n')
+ printf("%c", a & 0xff);
+ else if ((a & 0xff) == 0x0d)
+ printf("\n");
+ else if ((a & 0xff) == 0x7f)
+ printf("\b");
+ else if (a & 0xff)
+ printf(" [%02x] ", a & 0xff);
+ }
+ }
+ }
+ fflush(stdout);
+ }
+ }
+#ifdef ARM64
+ else if (regs.REG_ORIG_ACCUM == SYS_read || regs.REG_ORIG_ACCUM == SYS_write)
+ {
+ user_pt_regs_insert(&user_pt_regs_head,&regs);
+ }
+#endif
+ ptrace(PTRACE_SYSCALL, pid, 0, 0);
+ }
+ }
+
+ return 0;
+}
diff --git a/src/prtstat.c b/src/prtstat.c
new file mode 100644
index 0000000..d14c659
--- /dev/null
+++ b/src/prtstat.c
@@ -0,0 +1,341 @@
+/*
+ * prtstat.c - Print a processes stat file
+ *
+ * Copyright (C) 2009-2024 Craig Small
+ * Based upon a shell script pstat by martin f. krafft <madduck@madduck.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <assert.h>
+#include <errno.h>
+#include <getopt.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "i18n.h"
+#include "prtstat.h"
+
+#define NORETURN __attribute__((__noreturn__))
+
+static long sc_clk_tck;
+
+static void usage(const char *errormsg) NORETURN;
+
+static void usage(const char *errormsg)
+{
+ if (errormsg != NULL)
+ fprintf(stderr, "%s\n", errormsg);
+ fprintf(stderr,
+ _
+ ("Usage: prtstat [options] PID ...\n"
+ " prtstat -V\n"
+ "Print information about a process\n"
+ " -r,--raw Raw display of information\n"
+ " -V,--version Display version information and exit\n"
+ ));
+ exit(1);
+}
+
+static void print_version(void)
+{
+ fprintf(stderr, _("prtstat (PSmisc) %s\n"), VERSION);
+ fprintf(stderr, _( "Copyright (C) 2009-2024 Craig Small\n\n"));
+ fprintf(stderr, _(
+ "PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+ "This is free software, and you are welcome to redistribute it under\n"
+ "the terms of the GNU General Public License.\n"
+ "For more information about these matters, see the files named COPYING.\n"));
+}
+
+static char *print_state(const char state)
+{
+ switch(state) {
+ case 'R':
+ return _("running");
+ case 'S':
+ return _("sleeping");
+ case 'D':
+ return _("disk sleep");
+ case 'Z':
+ return _("zombie");
+ case 'T':
+ return _("traced");
+ case 'W':
+ return _("paging");
+ }
+ return _("unknown");
+}
+
+#define RAW_STAT(afmt,aname, aval, bfmt, bname, bval) \
+ printf("%12.11s: %-15"afmt"\t%22.21s: %"bfmt"\n",(aname),(aval),(bname),(bval))
+
+static double convert_time(const unsigned long ticks)
+{
+ assert(sc_clk_tck > 0);
+ return (float)ticks / (float)sc_clk_tck;
+}
+
+static void convert_bytes(char *buf, unsigned long bytes)
+{
+ if (bytes > (10000000))
+ sprintf(buf, "%lu MB",bytes/1000000L);
+ else if (bytes > (10000))
+ sprintf(buf, "%lu kB", bytes/1000L);
+ else
+ sprintf(buf, "%lu B", bytes);
+}
+
+/* comes from SCHED_* from linux/sched.h */
+static char *convert_policy(const unsigned int policy)
+{
+ static char *policy_names[] = { "normal", "fifo","rr", "batch", "iso", "idle" };
+ if (policy < 6)
+ return policy_names[policy];
+ return "unknown";
+}
+
+/* minor is bits 31-20 and 7-0, major is 15-8 */
+static char *convert_tty(int tty_nr)
+{
+ static char buf[20];
+ sprintf(buf, "%d:%d",(tty_nr & 0xff00)>>8,(tty_nr & 0xff)|((tty_nr & 0xfff00000)>>20));
+ return buf;
+}
+
+
+static void print_raw_stat(const int pid,struct proc_info *pr)
+{
+ RAW_STAT("d","pid",pid,"s","comm",pr->comm);
+ RAW_STAT("c","state",pr->state, "d","ppid",pr->ppid);
+ RAW_STAT("d","pgrp",pr->pgrp, "d","session",pr->session);
+ RAW_STAT("d","tty_nr",pr->tty_nr, "d","tpgid",pr->tp_gid);
+ RAW_STAT("x","flags",pr->flags, "lu","minflt",pr->minflt);
+ RAW_STAT("lu","cminflt",pr->cminflt, "lu","majflt",pr->majflt);
+ RAW_STAT("lu","cmajflt",pr->cmajflt, "lu","utime",pr->utime);
+ RAW_STAT("lu","stime",pr->stime, "ld","cutime",pr->cutime);
+ RAW_STAT("ld","cstime",pr->cstime, "ld","priority",pr->priority);
+ RAW_STAT("ld","nice",pr->nice, "ld","num_threads",pr->num_threads);
+ RAW_STAT("ld","itrealvalue",pr->itrealvalue, "llu","starttime",pr->starttime);
+ RAW_STAT("lu","vsize",pr->vsize, "ld","rss",pr->rss);
+ RAW_STAT("lu","rsslim",pr->rsslim, "lu","startcode",pr->startcode);
+ RAW_STAT("lu","endcode",pr->endcode, "lu","startstack",pr->startstack);
+ RAW_STAT("lX","kstkesp",pr->kstesp, "lX","kstkeip",pr->ksteip);
+ RAW_STAT("lu","wchan",pr->wchan, "lu","nswap",pr->nswap);
+ RAW_STAT("lu","cnswap",pr->wchan, "d","exit_signal",pr->exit_signal);
+ RAW_STAT("d","processor",pr->processor, "u","rt_priority",pr->rt_priority);
+ RAW_STAT("u","policy",pr->policy, "llu","delayaccr_blkio_ticks",pr->blkio);
+ RAW_STAT("lu","guest_time",pr->guest_time, "ld","cguest_time",pr->cguest_time);
+}
+static void print_formated_stat(const int pid,struct proc_info *pr)
+{
+ char buf_vsize[100];
+ char buf_rss[100];
+ char buf_rsslim[100];
+ long page_size;
+
+ page_size = sysconf(_SC_PAGESIZE);
+ assert(page_size>1);
+
+ printf(_(
+ "Process: %-14s\t\tState: %c (%s)\n"
+ " CPU#: %-3d\t\tTTY: %s\tThreads: %ld\n"),
+ pr->comm, pr->state, print_state(pr->state),
+ pr->processor, convert_tty(pr->tty_nr), pr->num_threads);
+ printf(_(
+ "Process, Group and Session IDs\n"
+ " Process ID: %d\t\t Parent ID: %d\n"
+ " Group ID: %d\t\t Session ID: %d\n"
+ " T Group ID: %d\n\n"),
+ pid, pr->ppid, pr->pgrp, pr->session, pr->tp_gid);
+ printf(_(
+ "Page Faults\n"
+ " This Process (minor major): %8lu %8lu\n"
+ " Child Processes (minor major): %8lu %8lu\n"),
+ pr->minflt, pr->majflt, pr->cminflt, pr->cmajflt);
+ printf(_(
+ "CPU Times\n"
+ " This Process (user system guest blkio): %6.2f %6.2f %6.2f %6.2f\n"
+ " Child processes (user system guest): %6.2f %6.2f %6.2f\n"),
+ convert_time(pr->utime), convert_time(pr->stime), convert_time(pr->guest_time), convert_time(pr->blkio),
+ convert_time(pr->cutime), convert_time(pr->cstime), convert_time(pr->cguest_time));
+ convert_bytes(buf_vsize, pr->vsize);
+ convert_bytes(buf_rss, pr->rss*page_size);
+ convert_bytes(buf_rsslim, pr->rsslim);
+ printf(_(
+ "Memory\n"
+ " Vsize: %-10s\n"
+ " RSS: %-10s \t\t RSS Limit: %s\n"
+ " Code Start: %#-10lx\t\t Code Stop: %#-10lx\n"
+ " Stack Start: %#-10lx\n"
+ " Stack Pointer (ESP): %#10lx\t Inst Pointer (EIP): %#10lx\n"),
+ buf_vsize, buf_rss, buf_rsslim,
+ pr->startcode, pr->endcode,
+ pr->startstack, pr->kstesp, pr->ksteip);
+ printf(_(
+ "Scheduling\n"
+ " Policy: %s\n"
+ " Nice: %ld \t\t RT Priority: %ld %s\n"),
+ convert_policy(pr->policy),
+ pr->nice, (pr->priority>0?pr->priority-20:1-pr->priority),
+ (pr->priority>0?"(non RT)":""));
+
+
+
+
+}
+static void print_stat(const int pid, const opt_type options)
+{
+ char *pathname;
+ char buf[BUFSIZ];
+ char *bptr;
+ FILE *fp;
+
+ struct proc_info *pr = NULL;
+
+ if ( (asprintf(&pathname, "/proc/%d/stat",(int)pid)) < 0) {
+ perror(_("asprintf in print_stat failed.\n"));
+ exit(1);
+ }
+ if ( (fp = fopen(pathname,"r")) == NULL) {
+ if (errno == ENOENT)
+ fprintf(stderr, _("Process with pid %d does not exist.\n"), pid);
+ else
+ fprintf(stderr, _("Unable to open stat file for pid %d (%s)\n"),(int)pid,strerror(errno));
+ free(pathname);
+ free(pr);
+ return;
+ }
+ free(pathname);
+
+ if (fgets(buf,BUFSIZ,fp) == NULL) {
+ fclose(fp);
+ return;
+ }
+ fclose(fp);
+ bptr = strchr(buf, '(');
+ if (bptr == NULL) return;
+ bptr++;
+ if ((pr = malloc(sizeof(struct proc_info))) == NULL) {
+ fprintf(stderr, _("Unable to allocate memory for proc_info\n"));
+ return;
+ }
+ pr->comm = NULL;
+ if (sscanf(bptr,
+ "%m[^)]) "
+ "%c "
+ "%d %d %d %d %d %d"
+ "%lu %lu %lu %lu " /*flts*/
+ "%lu %lu %lu %lu " /*times */
+ "%ld %ld %ld %ld " /* nice, priority, threads, itreal*/
+ "%llu " /*startime*/
+ "%lu %ld %lu " /* vsize, rss, rslim */
+ "%lu %lu %lu " /* startcode endcode startstack */
+ "%lu %lu " /* stack and ip */
+ "%*s %*s %*s %*s " /* signals - ignore as they are obsolete */
+ "%lu %lu %lu " /* wchan nswap cnswap */
+ "%d %d %u"
+ "%u %llu " /* policy blkio */
+ "%lu %lu ", /* guest time cguest time */
+ &pr->comm,
+ &pr->state,
+ &pr->ppid, &pr->pgrp, &pr->session, &pr->tty_nr, &pr->tp_gid, &pr->flags,
+ &pr->minflt, &pr->cminflt, &pr->majflt, &pr->cmajflt,
+ &pr->utime, &pr->stime, &pr->cutime, &pr->cstime,
+ &pr->priority, &pr->nice, &pr->num_threads, &pr->itrealvalue,
+ &pr->starttime,
+ &pr->vsize, &pr->rss, &pr->rsslim,
+ &pr->startcode, &pr->endcode, &pr->startstack,
+ &pr->kstesp, &pr->ksteip,
+ &pr->wchan, &pr->nswap, &pr->cnswap,
+ &pr->exit_signal, &pr->processor, &pr->rt_priority,
+ &pr->policy, &pr->blkio,
+ &pr->guest_time, &pr->cguest_time
+ ) == 39) {
+ if (options & OPT_RAW)
+ print_raw_stat(pid, pr);
+ else
+ print_formated_stat(pid, pr);
+ } else
+ fprintf(stderr, _("Unable to scan stat file"));
+ free(pr->comm);
+ free(pr);
+}
+
+int main(int argc, char *argv[])
+{
+ int optc;
+ struct stat st;
+ int pptr;
+ int pid;
+ opt_type opt_flags = 0;
+
+ struct option options[] = {
+ {"raw" ,0, NULL, 'r' },
+ {"version", 0, NULL, 'V'},
+ { 0, 0, 0, 0}
+ };
+
+#ifdef ENABLE_NLS
+ /* Set up the i18n */
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+#endif
+
+ while ((optc = getopt_long(argc, argv, "rV", options, NULL)) != -1) {
+ switch(optc) {
+ case 'r':
+ opt_flags |= OPT_RAW;
+ break;
+ case 'V':
+ print_version();
+ return 0;
+ case '?':
+ usage(_("Invalid option"));
+ break;
+ }
+ } /* while */
+ if (argc <= optind)
+ usage(_("You must provide at least one PID."));
+
+ if (stat("/proc/self/stat", &st) == -1)
+ {
+ fprintf(stderr, _("/proc is not mounted, cannot stat /proc/self/stat.\n"));
+ exit(1);
+ }
+ sc_clk_tck = sysconf(_SC_CLK_TCK);
+ for(pptr = optind; pptr < argc; pptr++)
+ {
+ pid = atoi(argv[pptr]);
+ print_stat(pid, opt_flags);
+ }
+
+ return 0;
+}
+
+
+
diff --git a/src/prtstat.h b/src/prtstat.h
new file mode 100644
index 0000000..64c724f
--- /dev/null
+++ b/src/prtstat.h
@@ -0,0 +1,21 @@
+
+typedef unsigned char opt_type;
+#define OPT_RAW 1
+
+struct proc_info
+{
+ char *comm;
+ char state;
+ int ppid, pgrp, session, tty_nr, tp_gid,
+ exit_signal, processor;
+ unsigned int flags, rt_priority, policy;
+ unsigned long minflt, cminflt, majflt, cmajflt,
+ utime, stime, vsize, rsslim,
+ startcode, endcode, startstack,
+ kstesp, ksteip,
+ wchan, nswap, cnswap, guest_time;
+ long cutime, cstime, priority, nice, num_threads,
+ itrealvalue, rss, cguest_time;
+ unsigned long long starttime, blkio;
+};
+
diff --git a/src/pslog.c b/src/pslog.c
new file mode 100644
index 0000000..6da6f9b
--- /dev/null
+++ b/src/pslog.c
@@ -0,0 +1,175 @@
+/*
+ * pslog.c - print process log paths.
+ *
+ * Copyright (C) 2015-2017 Vito Mule'
+ * Copyright (C) 2024 Craig Small <csmall@dropbear.xyz>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dirent.h>
+#include <errno.h>
+#include <limits.h>
+#include <regex.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+
+#include "i18n.h"
+
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif /* PATH_MAX */
+
+static int
+usage ()
+{
+ fprintf(stderr,
+ "Usage: pslog PID...\n"
+ " pslog -V, --version\n\n"
+
+ " -V,--version display version information\n\n");
+ exit(255);
+}
+
+void
+print_version()
+{
+ fprintf(stderr, "pslog (PSmisc) %s\n", VERSION);
+ fprintf(stderr,
+ "Copyright (C) 2015-2017 Vito Mule'.\n\n");
+ fprintf(stderr,
+ "PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+ "This is free software, and you are welcome to redistribute it under\n"
+ "the terms of the GNU General Public License.\n"
+ "For more information about these matters, see the files named COPYING.\n");
+}
+
+int
+main(int argc, char const *argv[])
+{
+ regex_t re_log;
+ regex_t re_pid;
+ char *fullpath = NULL;
+
+ if (argc < 2) {
+ usage();
+ }
+
+ /*
+ * Allowed on the command line:
+ * --version
+ * -V
+ * /proc/nnnn
+ * nnnn
+ * where nnnn is any number that doesn't begin with 0.
+ * If --version or -V are present, further arguments are ignored
+ * completely.
+ */
+
+ regcomp(&re_pid, "^((/proc/+)?[1-9][0-9]*|-V|--version)$",
+ REG_EXTENDED|REG_NOSUB);
+
+ if (regexec(&re_pid, argv[1], 0, NULL, 0) != 0) {
+ fprintf(stderr, "pslog: invalid process id: %s\n\n", argv[1]);
+ usage();
+ }
+ else if (!strcmp("-V", argv[1]) || !strcmp("--version", argv[1])) {
+ print_version();
+ return 0;
+ }
+
+ regfree(&re_pid);
+ regcomp(&re_log, "^(.*log)$",REG_EXTENDED|REG_NOSUB);
+
+ /*
+ * At this point, all arguments are in the form /proc/nnnn
+ * or nnnn, so a simple check based on the first char is
+ * possible.
+ */
+
+ struct dirent *namelist;
+
+ char* linkpath = (char*) malloc(PATH_MAX+1);
+ if (!linkpath) {
+ perror ("malloc");
+ return 1;
+ }
+
+ ssize_t linkname_size;
+ char buf[PATH_MAX+1];
+ DIR *pid_dir;
+
+ if (argv[1][0] != '/') {
+ if (asprintf(&fullpath, "/proc/%s/fd/", argv[1]) < 0) {
+ perror ("asprintf");
+ free(linkpath);
+ return 1;
+ }
+ } else {
+ if (asprintf(&fullpath, "%s/fd/", argv[1]) < 0) {
+ perror("asprintf");
+ free(linkpath);
+ return 1;
+ }
+ }
+
+ pid_dir = opendir(fullpath);
+ if (!pid_dir) {
+ perror("opendir");
+ free(linkpath);
+ free(fullpath);
+ return 1;
+ }
+
+ fprintf(stdout, "Pid no %s:\n", argv[1]);
+
+ while((namelist = readdir(pid_dir))) {
+ strncpy(linkpath, fullpath, PATH_MAX);
+ strncat(linkpath, namelist->d_name, PATH_MAX - strlen(linkpath));
+ linkname_size = readlink(linkpath, buf, PATH_MAX -1);
+ buf[linkname_size+1] = '\0';
+
+ if (regexec(&re_log, buf, 0, NULL, 0) == 0) {
+ fprintf(stdout, "Log path: %s\n", buf);
+ }
+ memset(&linkpath[0], 0, sizeof(*linkpath));
+ memset(&buf[0], 0, sizeof(buf));
+ }
+
+ free(linkpath);
+ free(fullpath);
+ regfree(&re_log);
+
+ if (closedir(pid_dir)) {
+ perror ("closedir");
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/src/pstree.c b/src/pstree.c
new file mode 100644
index 0000000..39265d1
--- /dev/null
+++ b/src/pstree.c
@@ -0,0 +1,1568 @@
+/*
+ * pstree.c - display process tree
+ *
+ * Copyright (C) 1993-2002 Werner Almesberger
+ * Copyright (C) 2002-2024 Craig Small <csmall@dropbear.xyz>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <dirent.h>
+#include <errno.h>
+#include <curses.h>
+#include <term.h>
+#include <termios.h>
+#include <langinfo.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <limits.h>
+#include <locale.h>
+
+#include "i18n.h"
+#include "comm.h"
+
+#ifdef WITH_SELINUX
+#include <dlfcn.h>
+#include <selinux/selinux.h>
+#endif /*WITH_SELINUX */
+
+#ifdef WITH_APPARMOR
+#include <dlfcn.h>
+#include <sys/apparmor.h>
+#endif /* WITH_APPARMOR */
+
+#if !defined(WITH_SELINUX) && !defined(WITH_APPARMOR)
+typedef void* security_context_t; /* DUMMY to remove most ifdefs */
+#endif /* !WITH_SELINUX && !WITH_APPARMOR */
+
+extern const char *__progname;
+
+#define PROC_BASE "/proc"
+
+#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
+#define DEFAULT_ROOT_PID 0
+#else
+#define DEFAULT_ROOT_PID 1
+#endif /* __FreeBSD__ */
+
+/* UTF-8 defines by Johan Myreen, updated by Ben Winslow */
+#define UTF_V "\342\224\202" /* U+2502, Vertical line drawing char */
+#define UTF_VR "\342\224\234" /* U+251C, Vertical and right */
+#define UTF_H "\342\224\200" /* U+2500, Horizontal */
+#define UTF_UR "\342\224\224" /* U+2514, Up and right */
+#define UTF_HD "\342\224\254" /* U+252C, Horizontal and down */
+
+#define VT_BEG "\033(0\017" /* use graphic chars */
+#define VT_END "\033(B" /* back to normal char set */
+#define VT_V "x" /* see UTF definitions above */
+#define VT_VR "t"
+#define VT_H "q"
+#define VT_UR "m"
+#define VT_HD "w"
+
+#define THREAD_FORMAT "{%.*s}" /* Format for thread names */
+
+enum ns_type {
+ CGROUPNS = 0,
+ IPCNS,
+ MNTNS,
+ NETNS,
+ PIDNS,
+ USERNS,
+ UTSNS,
+ TIMENS,
+ NUM_NS
+};
+
+enum color_type {
+ COLOR_NONE = 0,
+ COLOR_AGE,
+ NUM_COLOUR
+};
+
+static const char *ns_names[] = {
+ [CGROUPNS] = "cgroup",
+ [IPCNS] = "ipc",
+ [MNTNS] = "mnt",
+ [NETNS] = "net",
+ [PIDNS] = "pid",
+ [USERNS] = "user",
+ [UTSNS] = "uts",
+ [TIMENS] = "time",
+};
+
+typedef struct _proc {
+ char comm[COMM_LEN + 2 + 1]; /* add another 2 for thread brackets */
+ char **argv; /* only used : argv[0] is 1st arg; undef if argc < 1 */
+ int argc; /* with -a : number of arguments, -1 if swapped */
+ pid_t pid;
+ pid_t pgid;
+ uid_t uid;
+ ino_t ns[NUM_NS];
+ char flags;
+ double age;
+ struct _child *children;
+ struct _proc *parent;
+ struct _proc *next;
+} PROC;
+
+/* For flags above */
+#define PFLAG_HILIGHT 0x01
+#define PFLAG_THREAD 0x02
+
+typedef struct _child {
+ PROC *child;
+ struct _child *next;
+} CHILD;
+
+struct ns_entry {
+ ino_t number;
+ CHILD *children;
+ struct ns_entry *next;
+};
+
+static struct {
+ const char *empty_2; /* */
+ const char *branch_2; /* |- */
+ const char *vert_2; /* | */
+ const char *last_2; /* `- */
+ const char *single_3; /* --- */
+ const char *first_3; /* -+- */
+} sym_ascii = {
+" ", "|-", "| ", "`-", "---", "-+-"}
+
+, sym_utf = {
+" ",
+ UTF_VR UTF_H,
+ UTF_V " ",
+ UTF_UR UTF_H, UTF_H UTF_H UTF_H, UTF_H UTF_HD UTF_H}, sym_vt100 = {
+" ",
+ VT_BEG VT_VR VT_H VT_END,
+ VT_BEG VT_V VT_END " ",
+ VT_BEG VT_UR VT_H VT_END,
+ VT_BEG VT_H VT_H VT_H VT_END, VT_BEG VT_H VT_HD VT_H VT_END}
+
+, *sym = &sym_ascii;
+
+static PROC *list = NULL;
+
+struct age_to_color {
+ unsigned int age_seconds;
+ char *color;
+};
+
+struct age_to_color age_to_color[] = {
+ { 60, "\033[32m"},
+ {3600, "\033[33m"},
+ {0, "\033[31m"}
+ };
+
+/* The buffers will be dynamically increased in size as needed. */
+static int capacity = 0;
+static int *width = NULL;
+static int *more = NULL;
+
+static int print_args = 0, compact = 1, user_change = 0, pids = 0, pgids = 0,
+ show_parents = 0, by_pid = 0, trunc = 1, wait_end = 0, ns_change = 0,
+ thread_names = 0, hide_threads = 0;
+static int show_scontext = 0;
+static int output_width = 132;
+static int cur_x = 1;
+static char last_char = 0;
+static int dumped = 0; /* used by dump_by_user */
+static int charlen = 0; /* length of character */
+static enum color_type color_highlight = COLOR_NONE;
+
+/*
+ * Find the root PID.
+ * Check to see if PID 0 exists, such as in LXC
+ * Otherwise return 0 for BSD, 1 for others
+ */
+static pid_t find_root_pid(void)
+{
+ struct stat s;
+
+ if (stat(PROC_BASE "/0", &s) == 0)
+ return 0;
+ return DEFAULT_ROOT_PID;
+}
+
+const char *get_ns_name(enum ns_type id) {
+ if (id >= NUM_NS)
+ return NULL;
+ return ns_names[id];
+}
+
+static enum ns_type get_ns_id(const char *name) {
+ int i;
+
+ for (i = 0; i < NUM_NS; i++)
+ if (!strcmp(ns_names[i], name))
+ return i;
+ return NUM_NS;
+}
+
+static int verify_ns(enum ns_type id)
+{
+ char filename[50];
+ struct stat s;
+
+ snprintf(filename, 50, "/proc/%i/ns/%s", getpid(), get_ns_name(id));
+
+ return stat(filename, &s);
+}
+
+static inline void new_proc_ns(PROC *ns_task)
+{
+ struct stat st;
+ char buff[50];
+ pid_t pid = ns_task->pid;
+ int i;
+
+ for (i = 0; i < NUM_NS; i++) {
+ snprintf(buff, sizeof(buff), "/proc/%i/ns/%s", pid,
+ get_ns_name(i));
+ if (stat(buff, &st)) {
+ ns_task->ns[i] = 0;
+ continue;
+ }
+ ns_task->ns[i] = st.st_ino;
+ }
+}
+
+static void find_ns_and_add(struct ns_entry **root, PROC *r, enum ns_type id)
+{
+ struct ns_entry *ptr, *last = NULL;
+ CHILD *tmp_child, **c;
+
+ for (ptr = *root; ptr; ptr = ptr->next) {
+ if (ptr->number == r->ns[id])
+ break;
+ last = ptr;
+ }
+
+ if (!ptr) {
+
+ if (!(ptr = malloc(sizeof(*ptr)))) {
+ perror("malloc");
+ exit(1);
+ }
+
+ memset(ptr, 0, sizeof(*ptr));
+ ptr->number = r->ns[id];
+ if (*root == NULL)
+ *root = ptr;
+ else
+ last->next = ptr;
+ }
+
+ /* move the child to under the namespace's umbrella */
+ for (c = &ptr->children; *c; c = &(*c)->next)
+ ;
+
+ if (!(*c = malloc(sizeof(CHILD)))) {
+ perror("malloc");
+ exit(1);
+ }
+
+ (*c)->child = r;
+ (*c)->next = NULL;
+
+ /* detaching from parent */
+ if (r->parent) {
+ for (c = &r->parent->children; *c; c = &(*c)->next) {
+ if ((*c)->child == r) {
+ tmp_child = (*c)->next;
+ free(*c);
+ *c = tmp_child;
+ break;
+ }
+ }
+ r->parent = NULL;
+ }
+
+}
+
+static PROC *find_proc(pid_t pid);
+static void sort_by_namespace(PROC *r, enum ns_type id, struct ns_entry **root)
+{
+ CHILD *walk, *next;
+
+ /* first run, find the first process */
+ if (!r) {
+ r = find_proc(1);
+ if (!r)
+ return;
+ }
+
+ if (r->parent == NULL || r->parent->ns[id] != r->ns[id])
+ find_ns_and_add(root, r, id);
+
+ walk = r->children;
+ while (walk) {
+ next = walk->next;
+ sort_by_namespace(walk->child, id, root);
+ walk = next;
+ }
+}
+
+static void fix_orphans(const pid_t root_pid);
+
+/*
+ * Determine the correct output width, what we use is:
+ */
+static int get_output_width(void)
+{
+ char *ep, *env_columns;
+ struct winsize winsz;
+
+ env_columns = getenv("COLUMNS");
+ if (env_columns && *env_columns) {
+ long t;
+ t = strtol(env_columns, &ep, 0);
+ if (!*ep && (t > 0) && (t < 0x7fffffffL))
+ return (int)t;
+ }
+ if (ioctl(1, TIOCGWINSZ, &winsz) >= 0)
+ if (winsz.ws_col)
+ return winsz.ws_col;
+ return 132;
+
+}
+
+/*
+ * Allocates additional buffer space for width and more as needed.
+ * The first call will allocate the first buffer.
+ *
+ * index the index that will be used after the call
+ * to this function.
+ */
+static void ensure_buffer_capacity(int index)
+{
+ if (index >= capacity) {
+ if (capacity == 0)
+ capacity = 100;
+ else
+ capacity *= 2;
+ if (!(width = realloc(width, capacity * sizeof(int)))) {
+ perror("realloc");
+ exit(1);
+ }
+ if (!(more = realloc(more, capacity * sizeof(int)))) {
+ perror("realloc");
+ exit(1);
+ }
+ }
+}
+
+/*
+ * Frees any buffers allocated by ensure_buffer_capacity.
+ */
+static void free_buffers()
+{
+ if (width != NULL) {
+ free(width);
+ width = NULL;
+ }
+ if (more != NULL) {
+ free(more);
+ more = NULL;
+ }
+ capacity = 0;
+}
+
+static void free_children(CHILD *children)
+{
+ CHILD *walk, *next;
+
+ walk = children;
+ while (walk != NULL) {
+ next = walk->next;
+ free(walk);
+ walk = next;
+ }
+}
+
+static void free_proc()
+{
+ PROC *walk, *next;
+ walk = list;
+ while (walk != NULL) {
+ next = walk->next;
+ free_children(walk->children);
+ if (walk->argv) {
+ free(walk->argv[0]);
+ free(walk->argv);
+ }
+ free(walk);
+ walk = next;
+ }
+ list = NULL;
+}
+
+static void free_namespace(struct ns_entry **nsroot)
+{
+ struct ns_entry *walk, *next;
+ walk = *nsroot;
+ while (walk != NULL) {
+ next = walk->next;
+ free_children(walk->children);
+ free(walk);
+ walk = next;
+ }
+ *nsroot = NULL;
+}
+
+static void out_char(char c)
+{
+ if (charlen == 0) { /* "new" character */
+ if ((c & 0x80) == 0) {
+ charlen = 1; /* ASCII */
+ } else if ((c & 0xe0) == 0xc0) { /* 110.. 2 bytes */
+ charlen = 2;
+ } else if ((c & 0xf0) == 0xe0) { /* 1110.. 3 bytes */
+ charlen = 3;
+ } else if ((c & 0xf8) == 0xf0) { /* 11110.. 4 bytes */
+ charlen = 4;
+ } else {
+ charlen = 1;
+ }
+ cur_x++; /* count first byte of whatever it is only */
+ }
+ charlen--;
+ if (!trunc || cur_x <= output_width)
+ putchar(c);
+ else {
+ if (trunc && (cur_x == output_width + 1))
+ putchar('+');
+ }
+}
+
+
+static void out_string(const char *str)
+{
+ while (*str)
+ out_char(*str++);
+}
+
+
+static int out_int(int x)
+{ /* non-negative integers only */
+ int digits, div;
+
+ digits = 0;
+ for (div = 1; x / div; div *= 10)
+ digits++;
+ if (!digits)
+ digits = 1;
+ for (div /= 10; div; div /= 10)
+ out_char('0' + (x / div) % 10);
+ return digits;
+}
+
+#ifdef WITH_SELINUX
+static bool out_selinux_context(const PROC *current)
+{
+ static void (*my_freecon)(char*) = 0;
+ static int (*my_getpidcon)(pid_t pid, char **context) = 0;
+ static int (*my_is_selinux_enabled)(void) = 0;
+ static int selinux_enabled = 0;
+ static int tried_load = 0;
+ bool ret = false;
+ char *context;
+
+ if (!my_getpidcon && !tried_load) {
+ void *handle = dlopen("libselinux.so.1", RTLD_NOW);
+ if (handle) {
+ my_freecon = dlsym(handle, "freecon");
+ if (dlerror())
+ my_freecon = 0;
+ dlerror();
+ my_getpidcon = dlsym(handle, "getpidcon");
+ if (dlerror())
+ my_getpidcon = 0;
+ my_is_selinux_enabled = dlsym(handle, "is_selinux_enabled");
+ if (dlerror())
+ my_is_selinux_enabled = 0;
+ else
+ selinux_enabled = my_is_selinux_enabled();
+ }
+ tried_load++;
+ }
+ if (my_getpidcon && selinux_enabled && !my_getpidcon(current->pid, &context)) {
+ out_string(context);
+ my_freecon(context);
+ ret = true;
+ }
+ return ret;
+}
+#endif /* WITH_SELINUX */
+
+#ifdef WITH_APPARMOR
+static bool out_apparmor_context(const PROC *current)
+{
+ static int (*my_aa_gettaskcon)(pid_t pid, char **context, char **mode) = 0;
+ static int (*my_aa_is_enabled)(void) = 0;
+ static int apparmor_enabled = 0;
+ static int tried_load = 0;
+ bool ret = false;
+ char *context;
+
+ if (!my_aa_gettaskcon && !tried_load) {
+ void *handle = dlopen("libapparmor.so.1", RTLD_NOW);
+ if (handle) {
+ my_aa_gettaskcon = dlsym(handle, "aa_gettaskcon");
+ if (dlerror())
+ my_aa_gettaskcon = 0;
+ my_aa_is_enabled = dlsym(handle, "aa_is_enabled");
+ if (dlerror())
+ my_aa_is_enabled = 0;
+ else
+ apparmor_enabled = my_aa_is_enabled();
+ }
+ tried_load++;
+ }
+ if (my_aa_gettaskcon && apparmor_enabled && my_aa_gettaskcon(current->pid, &context, NULL) >= 0) {
+ out_string(context);
+ free(context);
+ ret = true;
+ }
+ return ret;
+}
+#endif /* WITH_APPARMOR */
+
+/*
+ * Print the security context of the current process. This is largely lifted
+ * from pr_context from procps ps/output.c
+ */
+static void out_scontext(const PROC *current)
+{
+ bool success = false;
+ out_string("`");
+
+#ifdef WITH_SELINUX
+ success = out_selinux_context(current);
+#endif /* WITH_SELINUX */
+
+#ifdef WITH_APPARMOR
+ success |= out_apparmor_context(current);
+#endif /* WITH_APPARMOR */
+
+ if (!success) {
+ FILE *file;
+ char path[50];
+ char readbuf[BUFSIZ+1];
+ int num_read;
+ snprintf(path, sizeof path, "/proc/%d/attr/current", current->pid);
+ if ( (file = fopen(path, "r")) != NULL) {
+ if (fgets(readbuf, BUFSIZ, file) != NULL) {
+ num_read = strlen(readbuf);
+ readbuf[num_read-1] = '\0';
+ out_string(readbuf);
+ }
+ fclose(file);
+ }
+ }
+ out_string("'");
+}
+
+static void out_newline(void)
+{
+ if (last_char && cur_x == output_width)
+ putchar(last_char);
+ last_char = 0;
+ putchar('\n');
+ cur_x = 1;
+}
+
+static void reset_color(void)
+{
+ if (color_highlight != COLOR_NONE) {
+ char *str = "\033[0m";
+ while (*str) putchar(*str++);
+ }
+}
+
+static void print_proc_color(const int process_age)
+{
+ struct age_to_color *p;
+ switch(color_highlight) {
+ case COLOR_AGE:
+ for(p=age_to_color; p->age_seconds != 0; p++)
+ if (process_age < p->age_seconds) break;
+
+ char *str = p->color;
+ while (*str) putchar(*str++);
+ break;
+ default:
+ break;
+ }
+}
+
+static PROC *find_proc(pid_t pid)
+{
+ PROC *walk;
+
+ for (walk = list; walk; walk = walk->next) {
+ if (walk->pid == pid)
+ return walk;
+ }
+ return NULL;
+}
+
+static PROC *new_proc(const char *comm, pid_t pid, uid_t uid)
+{
+ PROC *new;
+
+ if (!(new = malloc(sizeof(PROC)))) {
+ perror("malloc");
+ exit(1);
+ }
+
+ strncpy(new->comm, comm, COMM_LEN+2);
+ new->comm[COMM_LEN+1] = '\0'; /* make sure nul terminated*/
+ new->pid = pid;
+ new->uid = uid;
+ new->flags = 0;
+ new->argc = 0;
+ new->argv = NULL;
+ new->children = NULL;
+ new->parent = NULL;
+ new->next = list;
+ new_proc_ns(new);
+ return list = new;
+}
+
+
+static void add_child(PROC * parent, PROC * child)
+{
+ CHILD *new, **walk;
+ int cmp;
+
+ if (!(new = malloc(sizeof(CHILD)))) {
+ perror("malloc");
+ exit(1);
+ }
+ new->child = child;
+ for (walk = &parent->children; *walk; walk = &(*walk)->next)
+ if (by_pid) {
+ if ((*walk)->child->pid > child->pid)
+ break;
+ } else if ((cmp = strcmp((*walk)->child->comm, child->comm)) > 0) {
+ break; }
+ else if (!cmp && (*walk)->child->uid > child->uid)
+ break;
+ new->next = *walk;
+ *walk = new;
+}
+
+
+static void set_args(PROC * this, const char *args, int size)
+{
+ char *start;
+ int i;
+
+ if (!size) {
+ this->argc = -1;
+ return;
+ }
+ this->argc = 0;
+ for (i = 0; i < size - 1; i++)
+ if (!args[i]) {
+ this->argc++;
+ /* now skip consecutive NUL */
+ while(!args[i] && (i < size -1 ))
+ i++;
+ }
+ if (!this->argc)
+ return;
+ if (!(this->argv = malloc(sizeof(char *) * this->argc))) {
+ perror("malloc");
+ exit(1);
+ }
+ start = strchr(args, 0) + 1;
+ size -= start - args;
+ if (!(this->argv[0] = malloc((size_t) size))) {
+ perror("malloc");
+ exit(1);
+ }
+ start = memcpy(this->argv[0], start, (size_t) size);
+ for (i = 1; i < this->argc; i++)
+ this->argv[i] = start = strchr(start, 0) + 1;
+}
+
+static void
+rename_proc(PROC *this, const char *comm, uid_t uid)
+{
+ PROC *tmp_child, *parent;
+ CHILD **walk;
+
+ strncpy(this->comm, comm, COMM_LEN+2);
+ this->comm[COMM_LEN+1] = '\0';
+ this->uid = uid;
+
+ /* Re-sort children in parent, now we have a name */
+ if (!by_pid && this->parent) {
+ parent = this->parent;
+ for (walk = &parent->children; *walk; walk = &(*walk)->next) {
+ if (
+ ((*walk)->next != NULL) &&
+ strcmp((*walk)->child->comm, (*walk)->next->child->comm) > 0 ) {
+ tmp_child = (*walk)->child;
+ (*walk)->child = (*walk)->next->child;
+ (*walk)->next->child = tmp_child;
+ }
+ }
+ }
+}
+
+static void
+add_proc(const char *comm, pid_t pid, pid_t ppid, pid_t pgid, uid_t uid,
+ const char *args, int size, char isthread, double process_age_sec)
+{
+ PROC *this, *parent;
+
+ if (!(this = find_proc(pid)))
+ this = new_proc(comm, pid, uid);
+ else {
+ rename_proc(this, comm, uid);
+ }
+ if (args)
+ set_args(this, args, size);
+ if (pid == ppid)
+ ppid = 0;
+ this->pgid = pgid;
+ this->age = process_age_sec;
+ if (isthread)
+ this->flags |= PFLAG_THREAD;
+ if (!(parent = find_proc(ppid))) {
+ parent = new_proc("?", ppid, 0);
+ }
+ if (pid != 0) {
+ add_child(parent, this);
+ this->parent = parent;
+ }
+}
+
+
+static int tree_equal(const PROC * a, const PROC * b)
+{
+ const CHILD *walk_a, *walk_b;
+ int i;
+
+ if (strcmp(a->comm, b->comm))
+ return 0;
+ if (user_change && a->uid != b->uid)
+ return 0;
+ if (ns_change) {
+ for (i = 0; i < NUM_NS; i++)
+ if (a->ns[i] != b->ns[i])
+ return 0;
+ }
+ for (walk_a = a->children, walk_b = b->children; walk_a && walk_b;
+ walk_a = walk_a->next, walk_b = walk_b->next)
+ if (!tree_equal(walk_a->child, walk_b->child))
+ return 0;
+ return !(walk_a || walk_b);
+}
+
+static int
+out_args(char *mystr)
+{
+ char *here;
+ int strcount=0;
+ char tmpstr[5];
+
+ for (here = mystr; *here; here++) {
+ if (*here == '\\') {
+ out_string("\\\\");
+ strcount += 2;
+ } else if (*here >= ' ' && *here <= '~') {
+ out_char(*here);
+ strcount++;
+ } else {
+ sprintf(tmpstr, "\\%03o", (unsigned char) *here);
+ out_string(tmpstr);
+ strcount += 4;
+ }
+ } /* for */
+ return strcount;
+}
+
+static void
+dump_tree(PROC * current, int level, int rep, int leaf, int last,
+ uid_t prev_uid, int closing)
+{
+ CHILD *walk, *next, *tmp_child, **scan;
+ const struct passwd *pw;
+ int lvl, i, add, offset, len, swapped, info, count, comm_len, first;
+ const char *tmp, *here;
+
+ assert(closing >= 0);
+ if (!current)
+ return;
+ if (!leaf)
+ for (lvl = 0; lvl < level; lvl++) {
+ for (i = width[lvl] + 1; i; i--)
+ out_char(' ');
+ out_string(lvl ==
+ level -
+ 1 ? last ? sym->last_2 : sym->branch_2 : more[lvl +
+ 1] ?
+ sym->vert_2 : sym->empty_2);
+ }
+
+ if (rep < 2)
+ add = 0;
+ else {
+ add = out_int(rep) + 2;
+ out_string("*[");
+ }
+ print_proc_color(current->age);
+ if ((current->flags & PFLAG_HILIGHT) && (tmp = tgetstr("md", NULL)))
+ tputs(tmp, 1, putchar);
+ swapped = info = print_args;
+ if (swapped && current->argc < 0)
+ out_char('(');
+ comm_len = out_args(current->comm);
+ offset = cur_x;
+ if (pids) {
+ out_char(info++ ? ',' : '(');
+ (void) out_int(current->pid);
+ }
+ if (pgids) {
+ out_char(info++ ? ',' : '(');
+ (void) out_int(current->pgid);
+ }
+ if (user_change && prev_uid != current->uid) {
+ out_char(info++ ? ',' : '(');
+ if ((pw = getpwuid(current->uid)))
+ out_string(pw->pw_name);
+ else
+ (void) out_int(current->uid);
+ }
+ if (ns_change && current->parent) {
+ for (i = 0; i < NUM_NS; i++) {
+ if (current->ns[i] == 0 || current->parent->ns[i] == 0)
+ continue;
+ if (current->ns[i] != current->parent->ns[i]) {
+ out_char(info++ ? ',' : '(');
+ out_string(get_ns_name(i));
+ }
+ }
+ }
+ if (show_scontext) {
+ out_char(info++ ? ',' : '(');
+ out_scontext(current);
+ }
+ if ((swapped && print_args && current->argc < 0) || (!swapped && info))
+ out_char(')');
+ if ((current->flags & PFLAG_HILIGHT) && (tmp = tgetstr("me", NULL)))
+ tputs(tmp, 1, putchar);
+ if (print_args) {
+ for (i = 0; i < current->argc; i++) {
+ if (i < current->argc - 1) /* Space between words but not at the end of last */
+ out_char(' ');
+ len = 0;
+ for (here = current->argv[i]; *here; here++)
+ len += *here >= ' ' && *here <= '~' ? 1 : 4;
+ if (cur_x + len <=
+ output_width - (i == current->argc - 1 ? 0 : 4) || !trunc)
+ out_args(current->argv[i]);
+ else {
+ out_string("...");
+ break;
+ }
+ }
+ }
+ reset_color();
+ if (show_scontext || print_args || !current->children)
+ {
+ while (closing--)
+ out_char(']');
+ out_newline();
+ }
+ ensure_buffer_capacity(level);
+ more[level] = !last;
+
+ if (show_scontext || print_args)
+ {
+ width[level] = swapped + (comm_len > 1 ? 0 : -1);
+ count=0;
+ first=1;
+ for (walk = current->children; walk; walk = next) {
+ next = walk->next;
+ count=0;
+ if (compact && (walk->child->flags & PFLAG_THREAD)) {
+ scan = &walk->next;
+ while (*scan) {
+ if (!tree_equal(walk->child, (*scan)->child)) {
+ scan = &(*scan)->next;
+ } else {
+ if (next == *scan)
+ next = (*scan)->next;
+ count++;
+ tmp_child = (*scan)->next;
+ free(*scan);
+ *scan = tmp_child;
+ }
+ }
+ dump_tree(walk->child, level + 1, count + 1,
+ 0, !next, current->uid, closing+ (count ? 2 : 1));
+ //closing + (count ? 1 : 0));
+ } else {
+ dump_tree(walk->child, level + 1, 1, 0, !walk->next,
+ current->uid, 0);
+ }
+ }
+ return;
+ }
+ width[level] = comm_len + cur_x - offset + add;
+ if (cur_x >= output_width && trunc) {
+ out_string(sym->first_3);
+ out_string("+");
+ out_newline();
+ return;
+ }
+ first = 1;
+ for (walk = current->children; walk; walk = next) {
+ count = 0;
+ next = walk->next;
+ if (compact) {
+ scan = &walk->next;
+ while (*scan)
+ if (!tree_equal(walk->child, (*scan)->child))
+ scan = &(*scan)->next;
+ else {
+ if (next == *scan)
+ next = (*scan)->next;
+ count++;
+ tmp_child = (*scan)->next;
+ free(*scan);
+ *scan = tmp_child;
+ }
+ }
+ if (first) {
+ out_string(next ? sym->first_3 : sym->single_3);
+ first = 0;
+ }
+ dump_tree(walk->child, level + 1, count + 1,
+ walk == current->children, !next, current->uid,
+ closing + (count ? 1 : 0));
+ }
+}
+
+
+static void dump_by_user(PROC * current, uid_t uid)
+{
+ const CHILD *walk;
+
+ if (!current)
+ return;
+
+ if (current->uid == uid) {
+ if (dumped)
+ putchar('\n');
+ dump_tree(current, 0, 1, 1, 1, uid, 0);
+ dumped = 1;
+ return;
+ }
+ for (walk = current->children; walk; walk = walk->next)
+ dump_by_user(walk->child, uid);
+}
+
+static void dump_by_namespace(struct ns_entry *root)
+{
+ struct ns_entry *ptr = root;
+ CHILD *c;
+ char buff[14];
+
+ for ( ; ptr; ptr = ptr->next) {
+ snprintf(buff, sizeof(buff), "[%li]\n", (long int)ptr->number);
+ out_string(buff);
+ for (c = ptr->children; c; c = c->next)
+ dump_tree(c->child, 0, 1, 1, 1, 0, 0);
+ }
+}
+
+static void trim_tree_by_parent(PROC * current)
+{
+ if (!current)
+ return;
+
+ PROC * parent = current->parent;
+
+ if (!parent)
+ return;
+
+ free_children(parent->children);
+ parent->children = NULL;
+ add_child(parent, current);
+ trim_tree_by_parent(parent);
+}
+
+static double
+uptime()
+{
+ char * savelocale;
+ char buf[2048];
+ FILE* file;
+ if (!(file=fopen( PROC_BASE "/uptime", "r"))) {
+ fprintf(stderr, "pstree: error opening uptime file\n");
+ exit(1);
+ }
+ savelocale = setlocale(LC_NUMERIC,"C");
+ if (fscanf(file, "%2047s", buf) == EOF) perror("uptime");
+ fclose(file);
+ setlocale(LC_NUMERIC,savelocale);
+ return atof(buf);
+}
+
+/* process age from jiffies to seconds via uptime */
+static double process_age(const unsigned long long jf)
+{
+ double age;
+ double sc_clk_tck = sysconf(_SC_CLK_TCK);
+ assert(sc_clk_tck > 0);
+ age = uptime() - jf / sc_clk_tck;
+ if (age < 0L)
+ return 0L;
+ return age;
+}
+
+static char* get_threadname(const pid_t pid, const int tid, const char *comm)
+{
+ FILE *file;
+ char *thread_comm, *endcomm, *threadname;
+ char *path = NULL;
+ int len, nbytes;
+ char readbuf[BUFSIZ + 1];
+
+ if (! (threadname = malloc(COMM_LEN + 2 + 1))) {
+ exit(2);
+ }
+ if (!thread_names) {
+ sprintf(threadname, THREAD_FORMAT, COMM_LEN, comm);
+ return threadname;
+ }
+ len = snprintf(NULL, 0, "%s/%d/task/%d/stat", PROC_BASE, pid, tid);
+ if (len < 0)
+ exit(2);
+ len++;
+ path = malloc(len);
+ if (path == NULL)
+ exit(2);
+ nbytes = snprintf(path, len, "%s/%d/task/%d/stat", PROC_BASE, pid, tid);
+ if (nbytes < 0 || nbytes >= len)
+ perror("get_threadname: snprintf");
+ if ( (file = fopen(path, "r")) != NULL) {
+ if (fgets(readbuf, BUFSIZ, file) != NULL) {
+ if ((thread_comm = strchr(readbuf, '('))
+ && (endcomm = strrchr(thread_comm, ')'))) {
+ ++thread_comm;
+ *endcomm = '\0';
+ sprintf(threadname, THREAD_FORMAT, COMM_LEN, thread_comm);
+ (void) fclose(file);
+ free(path);
+ return threadname;
+ }
+ }
+ fclose(file);
+ }
+ free(path);
+
+ /* Fall back to old method */
+ sprintf(threadname, THREAD_FORMAT, COMM_LEN, comm);
+ return threadname;
+}
+
+/*
+ * read_proc now uses a similar method as procps for finding the process
+ * name in the /proc filesystem. My thanks to Albert and procps authors.
+ */
+static void read_proc(const pid_t root_pid)
+{
+ DIR *dir;
+ struct dirent *de;
+ FILE *file;
+ struct stat st;
+ char *path, *comm;
+ char *buffer;
+ size_t buffer_size;
+ char readbuf[BUFSIZ + 1];
+ char *tmpptr, *endptr;
+ pid_t pid, ppid, pgid;
+ int fd, size;
+ int empty;
+ unsigned long long proc_stt_jf = 0;
+ double process_age_sec = 0;
+
+ if (trunc)
+ buffer_size = output_width + 1;
+ else
+ buffer_size = BUFSIZ + 1;
+
+ if (!print_args)
+ buffer = NULL;
+ else if (!(buffer = malloc(buffer_size))) {
+ perror("malloc");
+ exit(1);
+ }
+ if (!(dir = opendir(PROC_BASE))) {
+ perror(PROC_BASE);
+ exit(1);
+ }
+ empty = 1;
+ while ((de = readdir(dir)) != NULL) {
+ pid = (pid_t) strtol(de->d_name, &endptr, 10);
+ if (endptr != de->d_name && endptr[0] == '\0') {
+ if (! (path = malloc(strlen(PROC_BASE) + strlen(de->d_name) + 10)))
+ exit(2);
+ sprintf(path, "%s/%d/stat", PROC_BASE, pid);
+ if ((file = fopen(path, "r")) != NULL) {
+ empty = 0;
+ sprintf(path, "%s/%d", PROC_BASE, pid);
+ if (stat(path, &st) < 0) {
+ (void) fclose(file);
+ free(path);
+ continue;
+ }
+ size = fread(readbuf, 1, BUFSIZ, file);
+ if (ferror(file) == 0) {
+ readbuf[size] = 0;
+ /* commands may have spaces or ) in them.
+ * so don't trust anything from the ( to the last ) */
+ if ((comm = strchr(readbuf, '('))
+ && (tmpptr = strrchr(comm, ')'))) {
+ ++comm;
+ *tmpptr = 0;
+ /* We now have readbuf with pid and cmd, and tmpptr+2
+ * with the rest */
+ /*printf("tmpptr: %s\n", tmpptr+2); */
+ if (sscanf(tmpptr + 2, "%*c %d %d %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %Lu",
+ &ppid, &pgid, &proc_stt_jf) == 3) {
+ DIR *taskdir;
+ struct dirent *dt;
+ char *taskpath;
+ int thread;
+
+ process_age_sec = process_age(proc_stt_jf);
+ /* handle process threads */
+ if (! hide_threads) {
+ if (! (taskpath = malloc(strlen(path) + 10)))
+ exit(2);
+ sprintf(taskpath, "%s/task", path);
+
+ if ((taskdir = opendir(taskpath)) != 0) {
+ /* if we have this dir, we're on 2.6 */
+ while ((dt = readdir(taskdir)) != NULL) {
+ if ((thread = atoi(dt->d_name)) != 0) {
+ if (thread != pid) {
+ char *threadname;
+ threadname = get_threadname(pid, thread, comm);
+ if (print_args)
+ add_proc(threadname, thread, pid, pgid, st.st_uid,
+ threadname, strlen (threadname) + 1, 1,
+ process_age_sec);
+ else
+ add_proc(threadname, thread, pid, pgid, st.st_uid,
+ NULL, 0, 1,
+ process_age_sec);
+ free(threadname);
+ }
+ }
+ }
+ (void) closedir(taskdir);
+ }
+ free(taskpath);
+ }
+
+ /* handle process */
+ if (!print_args)
+ add_proc(comm, pid, ppid, pgid, st.st_uid, NULL, 0, 0,
+ process_age_sec);
+ else {
+ sprintf(path, "%s/%d/cmdline", PROC_BASE, pid);
+ if ((fd = open(path, O_RDONLY)) < 0) {
+ /* If this fails then the process is gone. If a PID
+ * was specified on the command-line then we might
+ * not even be interested in the current process.
+ * There's no sensible way of dealing with this race
+ * so we might as well behave as if the current
+ * process did not exist. */
+ (void) fclose(file);
+ free(path);
+ continue;
+ }
+ if ((size = read(fd, buffer, buffer_size)) < 0) {
+ /* As above. */
+ close(fd);
+ (void) fclose(file);
+ free(path);
+ continue;
+ }
+ (void) close(fd);
+ /* If we have read the maximum screen length of args,
+ * bring it back by one to stop overflow */
+ if (size >= (int)buffer_size)
+ size--;
+ if (size)
+ buffer[size++] = 0;
+ add_proc(comm, pid, ppid, pgid, st.st_uid,
+ buffer, size, 0, process_age_sec);
+ }
+ }
+ }
+ }
+ (void) fclose(file);
+ }
+ free(path);
+ }
+ }
+ (void) closedir(dir);
+ fix_orphans(root_pid);
+ if (print_args)
+ free(buffer);
+ if (empty) {
+ fprintf(stderr, _("%s is empty (not mounted ?)\n"), PROC_BASE);
+ exit(1);
+ }
+}
+
+
+/* When using kernel 3.3 with hidepid feature enabled on /proc
+ * then we need fake root pid and gather all the orphan processes
+ * that is, processes with no known parent
+ * As we cannot be sure if it is just the root pid or others missing
+ * we gather the lot
+ */
+static void fix_orphans(const pid_t root_pid)
+{
+ PROC *root, *walk;
+
+ if (!(root = find_proc(root_pid))) {
+ root = new_proc("?", root_pid, 0);
+ }
+ for (walk = list; walk; walk = walk->next) {
+ if (walk->pid == 1 || walk->pid == 0)
+ continue;
+ if (walk->parent == NULL) {
+ add_child(root, walk);
+ walk->parent = root;
+ }
+ }
+}
+
+
+static void usage(void)
+{
+ fprintf(stderr, _(
+ "Usage: pstree [-acglpsStTuZ] [ -h | -H PID ] [ -n | -N type ]\n"
+ " [ -A | -G | -U ] [ PID | USER ]\n"
+ " or: pstree -V\n"));
+ fprintf(stderr, _(
+ "\n"
+ "Display a tree of processes.\n\n"));
+ fprintf(stderr, _(
+ " -a, --arguments show command line arguments\n"
+ " -A, --ascii use ASCII line drawing characters\n"
+ " -c, --compact-not don't compact identical subtrees\n"));
+ fprintf(stderr, _(
+ " -C, --color=TYPE color process by attribute\n"
+ " (age)\n"));
+ fprintf(stderr, _(
+ " -g, --show-pgids show process group ids; implies -c\n"
+ " -G, --vt100 use VT100 line drawing characters\n"));
+ fprintf(stderr, _(
+ " -h, --highlight-all highlight current process and its ancestors\n"
+ " -H PID, --highlight-pid=PID\n"
+ " highlight this process and its ancestors\n"
+ " -l, --long don't truncate long lines\n"));
+ fprintf(stderr, _(
+ " -n, --numeric-sort sort output by PID\n"
+ " -N TYPE, --ns-sort=TYPE\n"
+ " sort output by this namespace type\n"
+ " (cgroup, ipc, mnt, net, pid, time, user, uts)\n"
+ " -p, --show-pids show PIDs; implies -c\n"));
+ fprintf(stderr, _(
+ " -s, --show-parents show parents of the selected process\n"
+ " -S, --ns-changes show namespace transitions\n"
+ " -t, --thread-names show full thread names\n"
+ " -T, --hide-threads hide threads, show only processes\n"));
+ fprintf(stderr, _(
+ " -u, --uid-changes show uid transitions\n"
+ " -U, --unicode use UTF-8 (Unicode) line drawing characters\n"
+ " -V, --version display version information\n"));
+ fprintf(stderr, _(
+ " -Z, --security-context\n"
+ " show security attributes\n"));
+ fprintf(stderr, _("\n"
+ " PID start at this PID; default is 1 (init)\n"
+ " USER show only trees rooted at processes of this user\n\n"));
+ exit(1);
+}
+
+void print_version()
+{
+ fprintf(stderr, _("pstree (PSmisc) %s\n"), VERSION);
+ fprintf(stderr,
+ _
+ ("Copyright (C) 1993-2024 Werner Almesberger and Craig Small\n\n"));
+ fprintf(stderr,
+ _("PSmisc comes with ABSOLUTELY NO WARRANTY.\n"
+ "This is free software, and you are welcome to redistribute it under\n"
+ "the terms of the GNU General Public License.\n"
+ "For more information about these matters, see the files named COPYING.\n"));
+}
+
+
+int main(int argc, char **argv)
+{
+ PROC *current;
+ const struct passwd *pw;
+ struct ns_entry *nsroot = NULL;
+ pid_t pid, highlight, root_pid;
+ char termcap_area[1024];
+ char *termname, *endptr;
+ int c, pid_set = 0;
+ enum ns_type nsid = NUM_NS;
+
+ struct option options[] = {
+ {"arguments", 0, NULL, 'a'},
+ {"ascii", 0, NULL, 'A'},
+ {"compact-not", 0, NULL, 'c'},
+ {"color", 1, NULL, 'C'},
+ {"vt100", 0, NULL, 'G'},
+ {"highlight-all", 0, NULL, 'h'},
+ {"highlight-pid", 1, NULL, 'H'},
+ {"long", 0, NULL, 'l'},
+ {"numeric-sort", 0, NULL, 'n'},
+ {"ns-sort", 1, NULL, 'N' },
+ {"show-pids", 0, NULL, 'p'},
+ {"show-pgids", 0, NULL, 'g'},
+ {"show-parents", 0, NULL, 's'},
+ {"ns-changes", 0, NULL, 'S' },
+ {"thread-names", 0, NULL, 't'},
+ {"hide-threads", 0, NULL, 'T'},
+ {"uid-changes", 0, NULL, 'u'},
+ {"unicode", 0, NULL, 'U'},
+ {"version", 0, NULL, 'V'},
+ {"security-context", 0, NULL, 'Z'},
+ { 0, 0, 0, 0 }
+ };
+
+ output_width = get_output_width();
+ root_pid = find_root_pid();
+ pid = root_pid;
+ highlight = 0;
+ pw = NULL;
+
+#ifdef ENABLE_NLS
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+#endif
+
+ if (!strcmp(__progname, "pstree.x11"))
+ wait_end = 1;
+
+ /*
+ * Attempt to figure out a good default symbol set. Will be overriden by
+ * command-line options, if given.
+ */
+
+ if (isatty(1) && !strcmp(nl_langinfo(CODESET), "UTF-8")) {
+ /* Use UTF-8 symbols if the locale's character set is UTF-8. */
+ sym = &sym_utf;
+ } else if (isatty(1) && (termname = getenv("TERM")) &&
+ (strlen(termname) > 0) &&
+ (setupterm(NULL, 1 /* stdout */ , NULL) == OK) &&
+ (tigetstr("acsc") != NULL) && (tigetstr("acsc") != (char *)-1)) {
+ /*
+ * Failing that, if TERM is defined, a non-null value, and the terminal
+ * has the VT100 graphics charset, use it.
+ */
+ /* problems with VT100 on some terminals, making this ascci
+ * for now
+ */
+ sym = &sym_ascii;
+ } else {
+ /* Otherwise, fall back to ASCII. */
+ sym = &sym_ascii;
+ }
+
+ while ((c =
+ getopt_long(argc, argv, "aAcC:GhH:nN:pglsStTuUVZ", options,
+ NULL)) != -1)
+ switch (c) {
+ case 'a':
+ print_args = 1;
+ break;
+ case 'A':
+ sym = &sym_ascii;
+ break;
+ case 'c':
+ compact = 0;
+ break;
+ case 'C':
+ if (strcasecmp("age", optarg) == 0) {
+ color_highlight = COLOR_AGE;
+ } else {
+ usage();
+ }
+ break;
+ case 'G':
+ sym = &sym_vt100;
+ break;
+ case 'h':
+ if (highlight)
+ usage();
+ if (getenv("TERM")
+ && tgetent(termcap_area, getenv("TERM")) > 0)
+ highlight = getpid();
+ break;
+ case 'H':
+ if (highlight)
+ usage();
+ if (!getenv("TERM")) {
+ fprintf(stderr, _("TERM is not set\n"));
+ return 1;
+ }
+ if (tgetent(termcap_area, getenv("TERM")) <= 0) {
+ fprintf(stderr, _("Can't get terminal capabilities\n"));
+ return 1;
+ }
+ if (!(highlight = atoi(optarg)))
+ usage();
+ break;
+ case 'l':
+ trunc = 0;
+ break;
+ case 'n':
+ by_pid = 1;
+ break;
+ case 'N':
+ nsid = get_ns_id(optarg);
+ if (nsid == NUM_NS)
+ usage();
+ if (verify_ns(nsid)) {
+ fprintf(stderr,
+ _("procfs file for %s namespace not available\n"),
+ optarg);
+ return 1;
+ }
+ break;
+ case 'p':
+ pids = 1;
+ compact = 0;
+ break;
+ case 'g':
+ pgids = 1;
+ break;
+ case 's':
+ show_parents = 1;
+ break;
+ case 'S':
+ ns_change = 1;
+ break;
+ case 't':
+ thread_names = 1;
+ break;
+ case 'T':
+ hide_threads = 1;
+ break;
+ case 'u':
+ user_change = 1;
+ break;
+ case 'U':
+ sym = &sym_utf;
+ break;
+ case 'V':
+ print_version();
+ return 0;
+ case 'Z':
+ show_scontext = 1;
+ break;
+ default:
+ usage();
+ }
+ if (optind == argc - 1) {
+ if (isdigit(*argv[optind])) {
+ pid = (pid_t) strtol(argv[optind++], &endptr, 10);
+ pid_set = 1;
+ if (endptr[0] != '\0')
+ usage();
+ } else if (!(pw = getpwnam(argv[optind++]))) {
+ fprintf(stderr, _("No such user name: %s\n"),
+ argv[optind - 1]);
+ return 1;
+ }
+ }
+ if (optind != argc)
+ usage();
+ read_proc(root_pid);
+ for (current = find_proc(highlight); current;
+ current = current->parent)
+ current->flags |= PFLAG_HILIGHT;
+
+ if(show_parents && pid_set == 1) {
+ PROC *child_proc;
+
+ if ( (child_proc = find_proc(pid)) == NULL) {
+ fprintf(stderr, _("Process %d not found.\n"), pid);
+ return 1;
+ }
+ trim_tree_by_parent(child_proc);
+
+ pid = root_pid;
+ }
+
+ if (nsid != NUM_NS) {
+ sort_by_namespace(NULL, nsid, &nsroot);
+ dump_by_namespace(nsroot);
+ } else if (!pw)
+ dump_tree(find_proc(pid), 0, 1, 1, 1, 0, 0);
+ else {
+ dump_by_user(find_proc(root_pid), pw->pw_uid);
+ if (!dumped) {
+ fprintf(stderr, _("No processes found.\n"));
+ return 1;
+ }
+ }
+ free_buffers();
+ free_proc();
+ free_namespace(&nsroot);
+ if (wait_end == 1) {
+ fprintf(stderr, _("Press return to close\n"));
+ (void) getchar();
+ }
+
+ return 0;
+}
diff --git a/src/signals.c b/src/signals.c
new file mode 100644
index 0000000..c140dba
--- /dev/null
+++ b/src/signals.c
@@ -0,0 +1,86 @@
+/*
+ * signals.c - signal name handling
+ *
+ * Copyright (C) 1993-2002 Werner Almesberger
+ * Copyright (C) 2002-2024 Craig Small
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <signal.h>
+
+#include "i18n.h"
+#include "signals.h"
+
+
+typedef struct
+{
+ int number;
+ const char *name;
+}
+SIGNAME;
+
+
+static SIGNAME signals[] = {
+#include "signames.h"
+ {0, NULL}
+};
+
+
+void
+list_signals (void)
+{
+ SIGNAME *walk;
+ int col;
+
+ col = 0;
+ for (walk = signals; walk->name; walk++)
+ {
+ if (col + strlen (walk->name) + 1 > 80)
+ {
+ putchar ('\n');
+ col = 0;
+ }
+ printf ("%s%s", col ? " " : "", walk->name);
+ col += strlen (walk->name) + 1;
+ }
+ putchar ('\n');
+}
+
+
+int
+get_signal (char *name, const char *cmd)
+{
+ SIGNAME *walk;
+
+ if (isdigit (*name))
+ return atoi (name);
+ if (!strncmp("SIG", name, 3))
+ name += 3;
+ for (walk = signals; walk->name; walk++)
+ if (!strcmp (walk->name, name))
+ break;
+ if (walk->name)
+ return walk->number;
+ fprintf (stderr, _("%s: unknown signal; %s -l lists signals.\n"), name, cmd);
+ exit (1);
+}
diff --git a/src/signals.h b/src/signals.h
new file mode 100644
index 0000000..b936c46
--- /dev/null
+++ b/src/signals.h
@@ -0,0 +1,19 @@
+/* signals.h - signal name handling */
+
+/* Copyright 1993-1995 Werner Almesberger. See file COPYING for details. */
+
+
+#ifndef SIGNALS_H
+#define SIGNALS_H
+
+void list_signals (void);
+
+/* Lists all known signal names on standard output. */
+
+int get_signal (char *name, const char *cmd);
+
+/* Returns the signal number of NAME. If no such signal exists, an error
+ message is displayed and the program is terminated. CMD is the name of the
+ application. */
+
+#endif
diff --git a/src/signames.c b/src/signames.c
new file mode 100644
index 0000000..fd8d455
--- /dev/null
+++ b/src/signames.c
@@ -0,0 +1,5 @@
+/*
+ * signames.c: Dummy file to better generate signames.h
+ */
+
+#include <signal.h>
diff --git a/src/socket_test.c b/src/socket_test.c
new file mode 100644
index 0000000..ac6ebec
--- /dev/null
+++ b/src/socket_test.c
@@ -0,0 +1,55 @@
+/*
+ * Creates named and anonymous sockets to test fuser
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+int main(int argc, char *argv[])
+{
+ int skt;
+ struct sockaddr_un name;
+
+ if (argc < 2)
+ {
+ fprintf(stderr, "Usage:\n%s <socketpath>\n", argv[0]);
+ exit(EXIT_FAILURE);
+ }
+
+ if ( (skt = socket(AF_UNIX, SOCK_SEQPACKET, 0)) < 0)
+ {
+ perror("socket");
+ exit(EXIT_FAILURE);
+ }
+
+ memset(&name, 0, sizeof(name));
+
+ name.sun_family = AF_UNIX;
+ strncpy(name.sun_path, argv[1], sizeof(name.sun_path) -1);
+
+ if ( bind(skt, (const struct sockaddr *) &name, sizeof name) < 0)
+ {
+ perror("bind");
+ exit(EXIT_FAILURE);
+ }
+
+ if ( listen(skt, 5) < 0)
+ {
+ perror("listen");
+ exit(EXIT_FAILURE);
+ }
+
+ if ( accept(skt, NULL, NULL) < 0)
+ {
+ perror("accept");
+ exit(EXIT_FAILURE);
+ }
+
+// sleep(100);
+ exit(EXIT_SUCCESS);
+}
+
diff --git a/src/statx.c b/src/statx.c
new file mode 100644
index 0000000..d4c8d0b
--- /dev/null
+++ b/src/statx.c
@@ -0,0 +1,159 @@
+/*
+ * statx.c - Map modern statx(2) system call to older stat(2), lstat(2),
+ * and fstat(2) replacements named {,l,f}statn()
+ *
+ * Copyright (C) 2018 Werner Fink
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/sysmacros.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h> /* Definition of AT_* constants */
+
+int stat_flags = AT_NO_AUTOMOUNT|AT_STATX_DONT_SYNC;
+#ifdef WITH_STATX
+
+#include <errno.h>
+#ifndef HAVE_STATX
+# define _ASM_GENERIC_FCNTL_H /* Avoid collisions between asm/fcntl.h and bits/fcntl.h ! */
+# include <linux/fcntl.h> /* Definition of AT_* and AT_STATX_* constants ! */
+#endif
+
+#include <sys/stat.h>
+
+#ifndef HAVE_STATX
+# ifndef STATX_TYPE
+# include <linux/stat.h> /* Provides 'struct statx' and STATX_* ! */
+# endif
+#endif
+
+
+int statn(const char *pathname, unsigned int mask, struct stat *st)
+{
+ int flags = stat_flags;
+ int dirfd = pathname && *pathname == '/' ? 0 : AT_FDCWD;
+ int ret;
+ struct statx stx;
+
+#ifndef HAVE_STATX
+ ret = syscall(SYS_statx, dirfd, pathname, flags, mask, &stx);
+#else
+ ret = statx(dirfd, pathname, flags, mask, &stx);
+#endif
+ if (ret >= 0) {
+ st->st_dev = makedev(stx.stx_dev_major, stx.stx_dev_minor);
+ st->st_rdev = makedev(stx.stx_rdev_major, stx.stx_rdev_minor);
+
+ st->st_ino = stx.stx_ino;
+ st->st_mode = stx.stx_mode;
+ st->st_nlink = stx.stx_nlink;
+ st->st_uid = stx.stx_uid;
+ st->st_gid = stx.stx_gid;
+ st->st_size = stx.stx_size;
+ st->st_blksize = stx.stx_blksize;
+ st->st_blocks = stx.stx_blocks;
+
+ st->st_atim.tv_sec = stx.stx_atime.tv_sec;
+ st->st_atim.tv_nsec = stx.stx_atime.tv_nsec;
+ st->st_mtim.tv_sec = stx.stx_mtime.tv_sec;
+ st->st_mtim.tv_nsec = stx.stx_mtime.tv_nsec;
+ st->st_ctim.tv_sec = stx.stx_ctime.tv_sec;
+ st->st_ctim.tv_nsec = stx.stx_ctime.tv_nsec;
+ } else if (errno==ENOSYS || errno==EINVAL)
+ return stat(pathname, st);
+ return ret;
+}
+
+int fstatn(int fd, unsigned int mask, struct stat *st)
+{
+ int flags = AT_EMPTY_PATH|stat_flags;
+ int ret;
+ struct statx stx;
+
+#ifndef HAVE_STATX
+ ret = syscall(SYS_statx, fd, "", flags, mask, &stx);
+#else
+ ret = statx(fd, "", flags, mask, &stx);
+#endif
+ if (ret >= 0) {
+ st->st_dev = makedev(stx.stx_dev_major, stx.stx_dev_minor);
+ st->st_rdev = makedev(stx.stx_rdev_major, stx.stx_rdev_minor);
+
+ st->st_ino = stx.stx_ino;
+ st->st_mode = stx.stx_mode;
+ st->st_nlink = stx.stx_nlink;
+ st->st_uid = stx.stx_uid;
+ st->st_gid = stx.stx_gid;
+ st->st_size = stx.stx_size;
+ st->st_blksize = stx.stx_blksize;
+ st->st_blocks = stx.stx_blocks;
+
+ st->st_atim.tv_sec = stx.stx_atime.tv_sec;
+ st->st_atim.tv_nsec = stx.stx_atime.tv_nsec;
+ st->st_mtim.tv_sec = stx.stx_mtime.tv_sec;
+ st->st_mtim.tv_nsec = stx.stx_mtime.tv_nsec;
+ st->st_ctim.tv_sec = stx.stx_ctime.tv_sec;
+ st->st_ctim.tv_nsec = stx.stx_ctime.tv_nsec;
+ } else if (errno==ENOSYS || errno==EINVAL)
+ return fstat(fd, st);
+ return ret;
+}
+
+int lstatn(const char *pathname, unsigned int mask, struct stat *st)
+{
+ int flags = AT_SYMLINK_NOFOLLOW|stat_flags;
+ int dirfd = pathname && *pathname == '/' ? 0 : AT_FDCWD;
+ int ret;
+ struct statx stx;
+
+#ifndef HAVE_STATX
+ ret = syscall(SYS_statx, dirfd, pathname, flags, mask, &stx);
+#else
+ ret = statx(dirfd, pathname, flags, mask, &stx);
+#endif
+ if (ret >= 0) {
+ st->st_dev = makedev(stx.stx_dev_major, stx.stx_dev_minor);
+ st->st_rdev = makedev(stx.stx_rdev_major, stx.stx_rdev_minor);
+
+ st->st_ino = stx.stx_ino;
+ st->st_mode = stx.stx_mode;
+ st->st_nlink = stx.stx_nlink;
+ st->st_uid = stx.stx_uid;
+ st->st_gid = stx.stx_gid;
+ st->st_size = stx.stx_size;
+ st->st_blksize = stx.stx_blksize;
+ st->st_blocks = stx.stx_blocks;
+
+ st->st_atim.tv_sec = stx.stx_atime.tv_sec;
+ st->st_atim.tv_nsec = stx.stx_atime.tv_nsec;
+ st->st_mtim.tv_sec = stx.stx_mtime.tv_sec;
+ st->st_mtim.tv_nsec = stx.stx_mtime.tv_nsec;
+ st->st_ctim.tv_sec = stx.stx_ctime.tv_sec;
+ st->st_ctim.tv_nsec = stx.stx_ctime.tv_nsec;
+ } else if (errno==ENOSYS || errno==EINVAL)
+ return lstat(pathname, st);
+ return ret;
+}
+#endif /* WITH_STATX */
diff --git a/src/statx.h b/src/statx.h
new file mode 100644
index 0000000..b28cf9d
--- /dev/null
+++ b/src/statx.h
@@ -0,0 +1,73 @@
+/*
+ * statx.h - Map modern statx(2) system call to older stat(2), lstat(2),
+ * and fstat(2) replacements named {,l,f}statn()
+ *
+ * Copyright (C) 2018 Werner Fink
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _STATX_H
+#define _STATX_H
+
+extern int stat_flags;
+#ifdef WITH_STATX
+# ifndef HAVE_STATX
+# define _ASM_GENERIC_FCNTL_H /* Avoid collisions between asm/fcntl.h and bits/fcntl.h ! */
+# include <linux/fcntl.h> /* Definition of AT_* and AT_STATX_* constants ! */
+# ifndef STATX_TYPE
+# include <linux/stat.h> /* Provides 'struct statx' and STATX_* ! */
+# endif
+# endif
+extern int statn(const char*, unsigned int, struct stat*);
+extern int fstatn(int, unsigned int, struct stat*);
+extern int lstatn(const char*, unsigned int, struct stat*);
+#else /* WITH_STATX */
+
+#if !defined(HAVE_DECL_STATX_TYPE) || HAVE_DECL_STATX_TYPE == 0
+#define STATX_TYPE 0
+#define STATX_MODE 0
+#define STATX_NLINK 0
+#define STATX_UID 0
+#define STATX_GID 0
+#define STATX_ATIME 0
+#define STATX_MTIME 0
+#define STATX_CTIME 0
+#define STATX_INO 0
+#define STATX_SIZE 0
+#define STATX_BLOCKS 0
+#define STATX_BASIC_STATS 0
+#define STATX_BTIME 0
+#define STATX_ALL 0
+#endif /* HAVE_DECL_STATX_TYPE */
+
+extern inline int
+statn(const char *path, unsigned int mask __attribute__((unused)), struct stat *st)
+{
+ return stat(path, st);
+}
+extern inline int
+fstatn(int fd, unsigned int mask __attribute__((unused)), struct stat *st)
+{
+ return fstat(fd, st);
+}
+extern inline int
+lstatn(const char *path, unsigned int mask __attribute__((unused)), struct stat *st)
+{
+ return lstat(path, st);
+}
+#endif /* WITH_STATX */
+
+#endif
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
new file mode 100644
index 0000000..207f645
--- /dev/null
+++ b/testsuite/Makefile.am
@@ -0,0 +1,17 @@
+AUTOMAKE_OPTIONS = dejagnu
+export DEJAGNU
+
+# Programs that are expected across the board.
+DEJATOOL = killall
+DEJATOOL += pslog
+
+if WANT_FUSER
+ DEJATOOL += fuser
+endif
+
+
+EXTRA_DIST = \
+ config/unix.exp \
+ fuser.test/fuser.exp \
+ pslog.test/pslog.exp \
+ killall.test/killall.exp
diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in
new file mode 100644
index 0000000..49d3ae8
--- /dev/null
+++ b/testsuite/Makefile.in
@@ -0,0 +1,508 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@WANT_FUSER_TRUE@am__append_1 = fuser
+subdir = testsuite
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
+EXPECT = expect
+RUNTEST = runtest
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEJAGNU = @DEJAGNU@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HARDEN_CFLAGS = @HARDEN_CFLAGS@
+HARDEN_LDFLAGS = @HARDEN_LDFLAGS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PO4A = @PO4A@
+POSUB = @POSUB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMCAP_LIB = @TERMCAP_LIB@
+USE_NLS = @USE_NLS@
+USE_PO4A = @USE_PO4A@
+VERSION = @VERSION@
+WITH_AppArmor = @WITH_AppArmor@
+WITH_IPV6 = @WITH_IPV6@
+WITH_SELINUX = @WITH_SELINUX@
+WITH_STATX = @WITH_STATX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = dejagnu
+
+# Programs that are expected across the board.
+DEJATOOL = killall pslog $(am__append_1)
+EXTRA_DIST = \
+ config/unix.exp \
+ fuser.test/fuser.exp \
+ pslog.test/pslog.exp \
+ killall.test/killall.exp
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign testsuite/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+check-DEJAGNU: site.exp
+ srcdir='$(srcdir)'; export srcdir; \
+ EXPECT=$(EXPECT); export EXPECT; \
+ if $(SHELL) -c "$(RUNTEST) --version" > /dev/null 2>&1; then \
+ exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \
+ if $(RUNTEST) $(RUNTESTDEFAULTFLAGS) $(AM_RUNTESTFLAGS) $(RUNTESTFLAGS); \
+ then :; else exit_status=1; fi; \
+ done; \
+ else echo "WARNING: could not find '$(RUNTEST)'" 1>&2; :;\
+ fi; \
+ exit $$exit_status
+site.exp: Makefile $(EXTRA_DEJAGNU_SITE_CONFIG)
+ @echo 'Making a new site.exp file ...'
+ @echo '## these variables are automatically generated by make ##' >site.tmp
+ @echo '# Do not edit here. If you wish to override these values' >>site.tmp
+ @echo '# edit the last section' >>site.tmp
+ @echo 'set srcdir "$(srcdir)"' >>site.tmp
+ @echo "set objdir \"`pwd`\"" >>site.tmp
+ @echo 'set build_alias "$(build_alias)"' >>site.tmp
+ @echo 'set build_triplet $(build_triplet)' >>site.tmp
+ @echo 'set host_alias "$(host_alias)"' >>site.tmp
+ @echo 'set host_triplet $(host_triplet)' >>site.tmp
+ @list='$(EXTRA_DEJAGNU_SITE_CONFIG)'; for f in $$list; do \
+ echo "## Begin content included from file $$f. Do not modify. ##" \
+ && cat `test -f "$$f" || echo '$(srcdir)/'`$$f \
+ && echo "## End content included from file $$f. ##" \
+ || exit 1; \
+ done >> site.tmp
+ @echo "## End of auto-generated content; you can edit from here. ##" >> site.tmp
+ @if test -f site.exp; then \
+ sed -e '1,/^## End of auto-generated content.*##/d' site.exp >> site.tmp; \
+ fi
+ @-rm -f site.bak
+ @test ! -f site.exp || mv site.exp site.bak
+ @mv site.tmp site.exp
+
+distclean-DEJAGNU:
+ -rm -f site.exp site.bak
+ -l='$(DEJATOOL)'; for tool in $$l; do \
+ rm -f $$tool.sum $$tool.log; \
+ done
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-DEJAGNU distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \
+ cscopelist-am ctags-am distclean distclean-DEJAGNU \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am
+
+.PRECIOUS: Makefile
+
+export DEJAGNU
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/testsuite/config/unix.exp b/testsuite/config/unix.exp
new file mode 100644
index 0000000..cfa1777
--- /dev/null
+++ b/testsuite/config/unix.exp
@@ -0,0 +1,52 @@
+
+
+regexp "(.*\/)testsuite" $objdir objdir topdir
+
+
+proc psmisc_v_version { tool } {
+ global topdir
+ set toolpath ${topdir}src/${tool}
+ set tmp [ exec $toolpath -V 2>@1 ]
+ regexp {\(PSmisc\) ([0-9a-z.-]+)} $tmp dummy version
+ clone_output "$toolpath version $version\n"
+}
+
+proc fuser_version {} { psmisc_v_version fuser }
+proc killall_version {} { psmisc_v_version killall }
+proc pslog_version {} { psmisc_v_version pslog }
+proc prtstat_version {} { psmisc_v_version prtstat }
+
+proc expect_pass { testname reg } {
+ expect {
+ -re "$reg" { pass "$testname" }
+ default { fail "$testname" }
+ timeout { fail "$testname" }
+ }
+}
+
+proc expect_nothing { test } {
+ expect {
+ -re "\\S" { fail "$test" }
+ eof { pass "$test" }
+ }
+}
+
+proc kill_process pid {
+ set cmdline "kill $pid"
+ if { [catch { exec /bin/sh -c $cmdline } msg]} {
+ warning "Could not kill process: $msg\n"
+ }
+}
+
+proc make_socketproc { sktpath } {
+ global topdir socketproc_pid socketproc_spawnid testsocket_path
+
+ set testproc_realpath "${topdir}/src/socket_test"
+ set socketproc_pid [ spawn $testproc_realpath $sktpath ]
+}
+
+proc kill_socketproc { } {
+ global socketproc_pid
+ kill_process $socketproc_pid
+}
+
diff --git a/testsuite/fuser.test/fuser.exp b/testsuite/fuser.test/fuser.exp
new file mode 100644
index 0000000..aac5947
--- /dev/null
+++ b/testsuite/fuser.test/fuser.exp
@@ -0,0 +1,61 @@
+#
+# Testsuite for fuser
+#
+proc cleanup { } {
+ global test_file
+ exec rm $test_file
+}
+
+set fuser "${topdir}src/fuser"
+set test_file [ exec mktemp ]
+
+set verbose_header "\\s+USER\\s+PID ACCESS COMMAND\\s*"
+
+set test "fuser with no arguments"
+spawn $fuser
+expect_pass "$test" "^No process specification given\\s*Usage: fuser"
+
+set test "fuser no args, no proc"
+spawn $fuser $test_file
+expect_nothing "$test"
+
+set test "fuser -a no proc"
+spawn $fuser -a $test_file
+expect_pass "$test" "^${test_file}:\\s*$"
+
+set test "fuser -v, no proc"
+spawn $fuser $test_file
+expect_nothing "$test"
+
+set test "fuser -av, no proc"
+spawn $fuser -av $test_file
+expect_pass "$test" "^${verbose_header}${test_file}:\\s*$"
+
+set test "fuser -va, no proc"
+spawn $fuser -av $test_file
+expect_pass "$test" "^${verbose_header}${test_file}:\\s*$"
+
+set test "fuser -l"
+spawn $fuser -l
+expect_pass "$test" "^(\[A-Z12\]+\\s*)+$"
+
+# Create test process to make named unix socket
+# Needs a sleep otherwise the socket won't be
+# available before the file exists comes along
+set testsocket_path [ exec mktemp -u -p /tmp ]
+make_socketproc ${testsocket_path}
+sleep 1
+
+if {[file exists ${testsocket_path} ]} {
+ set test "fuser find socket from path"
+ spawn sh -c "$fuser -v $testsocket_path"
+ expect_pass "$test" "$socketproc_pid F"
+
+ set test "fuser find socket from mount"
+ spawn sh -c "$fuser -mv /tmp"
+ expect_pass "$test" "$socketproc_pid F"
+} else {
+ unsupported "fuser tests using named sockets"
+}
+kill_socketproc
+
diff --git a/testsuite/killall.test/killall.exp b/testsuite/killall.test/killall.exp
new file mode 100644
index 0000000..8bb3889
--- /dev/null
+++ b/testsuite/killall.test/killall.exp
@@ -0,0 +1,32 @@
+#
+# Testsuite for killall
+#
+
+set killall "${topdir}src/killall"
+set fake_proc_name "afakeprocname"
+
+set test "killall with no arguments"
+spawn $killall
+expect_pass "$test" "^Usage: killall \\\[OPTION\\\]\\.\\.\\. \\\[--\\\] NAME\\.\\.\\."
+
+set test "killall list signals"
+spawn $killall -l
+expect_pass "$test" "^(\[A-Z12\]+\\s*)+$"
+
+set test "killall process not found"
+spawn $killall ${fake_proc_name}
+expect_pass "$test" "${fake_proc_name}: no process found"
+
+set test "killall using -ve"
+spawn $killall -ve ${fake_proc_name}
+expect_pass "$test" "${fake_proc_name}: no process found"
+
+set signals [regexp -all -inline {\w+} [exec $killall -l]]
+foreach signame $signals {
+ set test "killall using signal $signame"
+ spawn $killall -$signame ${fake_proc_name}
+ expect_pass "$test" "${fake_proc_name}: no process found"
+ set test "killall using signal SIG$signame"
+ spawn $killall -SIG$signame ${fake_proc_name}
+ expect_pass "$test" "${fake_proc_name}: no process found"
+}
diff --git a/testsuite/pslog.test/pslog.exp b/testsuite/pslog.test/pslog.exp
new file mode 100644
index 0000000..b8d0e01
--- /dev/null
+++ b/testsuite/pslog.test/pslog.exp
@@ -0,0 +1,19 @@
+#
+# Testsuite for pslog
+#
+
+set pslog "${topdir}src/pslog"
+set fake_pid "27000"
+
+set test "pslog with no arguments"
+spawn $pslog
+expect_pass "$test" "^Usage: pslog PID\\.\\.\\."
+
+set test "pslog pid not found"
+if { [ file exists "/proc/$fake_pid" ] } {
+ untested "$test (PID exists)"
+} else {
+ spawn $pslog ${fake_pid}
+ expect_pass "$test" "opendir: No such file or directory"
+}
+