2021-11-14

sudo源码分析(一) 首先申明,sudo命令虽然很常用,不过以前使用的时候从来都不带任何参数,后面直接跟着想要得到root权限的命令。知道最近研究了下sudo源码后才知道sudo居然也有这么多参数。当时看源码时也被它处理各种参数以及各种情况的代码所困扰,本文尽量避开这些枯燥的代码,清晰明白地分析sudo是如何提升程序的权限的。 首先看一下main函数主要做了些什么事: int main(int argc, char 阅读详情
                <p> 需要在<a href="https://so.youkuaiyun.com/so/search?from=pc_blog_highlight&amp;q=linux" target="_blank" class="hl hl-1" one-link-mark="yes">linux</a>后台执行任务的情况还是经常会遇到的,比如一些费时的操作,或者一些需要长时间存在的程序。当然你也可以把这些任务做成守护进程或者后台服务,但这需要额外的工作量。</p> 

 linux提供了很多方法可以直接将普通的命令、脚本、应用程序以后台的形式运行起来,这样就不会阻塞终端窗口的继续使用。常用的涉及后台执行的命令有十几多个,包括:&、ctrl+z、bg、fg、nohup、disown、setsid、(cmd)、jobs、ps、kill 等。

 下面先对每个命令的功能作用做一个简单的介绍,然后分别给出使用案例进行详细解释。

1、后台执行脚本命令功能介绍

&:将当前命令以后台的形式运行;
ctrl+z:将前台任务转后台并冻结;
bg:将后台冻结的任务再次运行起来;
fg:将后台任务重新转前台执行;
nohup:隔离终端挂断信号,是命令的前缀;
disown:隔离终端挂断信号,事后使用;
setsid:重新创建一个会话进程来执行任务;
(cmd):创建一个独立shell来执行命令;
jobs:查看在后台运行的任务列表;
ps:查看正在运行的进程信息;
kill:杀掉某个进程;

 下面就分别对上面的命令举例来说说如何让脚本命令在后台执行,先看一下测试用例。

2、后台脚本任务测试用例

 下面所有的例子中的脚本统一使用这个脚本,它的功能是每2秒打印一次当前时间。hzqtest8.sh是测试脚本的名字,.sh文件最好放在当前用户默认目录中(如果你放在其他目录了,请注意权限问题!)。

1)创建脚本:

#创建脚本文件
hzq@ubuntu:~$ sudo gedit hzqtest8.sh
[sudo] hzq 的密码:
#输入脚本内容
#!/bin/bash
for ((i = 0; i < 10; i++)); do
    sleep 2
    echo $(date)
done
#保存退出。

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2)赋予执行权限:

hzq@ubuntu:~$ sudo chmod 755 hzqtest8.sh

 
  • 1

3、linux后台运行命令和脚本任务的例子

 下面通过6个典型的使用案例来解释各个命令的功能和使用方法。

● 例子1:用&
hzq@ubuntu:~$ ./hzqtest8.sh &

 
  • 1

 功能:&加在一个命令的最后,可以把当前行的命令放在后台执行。注意&前面有空格。

 这种方法中,当非正常退出当前shell终端时(包括直接叉掉、杀死、直接注销关机等),后台运行的hzqtest8.sh也会结束。这是因为脚本在后台运行时,运行脚本的父进程是当前shell终端进程,关闭当前shell终端时,会发送hangup挂断信号给子进程,子进程收到hangup信号后也就退出了。

 但是,如果用exit退出,ctrl+d退出,命令可以继续在后台运行。

● 例子2:用nohup和&

为了解决上面的问题可以用下面的例子,

hzq@ubuntu:~$ nohup ./hzqtest8.sh &
[1] 3640
hzq@ubuntu:~$ nohup: 忽略输入并把输出追加到'nohup.out'
hzq@ubuntu:~$

 
  • 1
  • 2
  • 3
  • 4

 功能:命令前加上nohup可以让你退出shell之后继续运行相应的进程。nohup就是忽略当前任务挂断信号的意思。这样就解决上面的问题了。

 输入nohup命令之后会给出提示:nohup: ignoring input and appending output to ‘nohup.out’(中文版参见上文),这是正常提示,直接打回车就可以。

  • nohup默认会把标准输出重定向到默认文件nohup.out中,你可以自定义该输出文件,如下例子。
hzq@ubuntu:~$ nohup ./hzqtest8.sh >hzqout.txt &
[1] 3668
hzq@ubuntu:~$ nohup: 忽略输入重定向错误到标准输出端

[1]+ 已完成 nohup ./hzqtest8.sh > hzqout.txt
hzq@ubuntu:~$
#看一下输出文件里的内容。
hzq@ubuntu:~$ cat hzqout.txt
2019年 10月 25日 星期五 23:37:48 CST
2019年 10月 25日 星期五 23:37:49 CST
2019年 10月 25日 星期五 23:37:50 CST
2019年 10月 25日 星期五 23:37:51 CST
2019年 10月 25日 星期五 23:37:52 CST
2019年 10月 25日 星期五 23:37:53 CST
2019年 10月 25日 星期五 23:37:54 CST
2019年 10月 25日 星期五 23:37:55 CST
2019年 10月 25日 星期五 23:37:56 CST
2019年 10月 25日 星期五 23:37:57 CST

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 如果输入nohup后不想打回车,可以用下面的例子,
hzq@ubuntu:~$ nohup ./hzqtest8.sh >hzqout.txt 2>&1 &
[1] 3690
hzq@ubuntu:~$ cat hzqout.txt
nohup: 忽略输入
2019年 10月 25日 星期五 23:38:53 CST
2019年 10月 25日 星期五 23:38:54 CST
2019年 10月 25日 星期五 23:38:55 CST
2019年 10月 25日 星期五 23:38:56 CST
2019年 10月 25日 星期五 23:38:57 CST
2019年 10月 25日 星期五 23:38:58 CST
2019年 10月 25日 星期五 23:38:59 CST
2019年 10月 25日 星期五 23:39:00 CST
2019年 10月 25日 星期五 23:39:01 CST
2019年 10月 25日 星期五 23:39:02 CST
[1]+  已完成               nohup ./hzqtest8.sh > hzqout.txt 2>&1
hzq@ubuntu:~$

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

 功能解释:2>&1 是将错误提示信息的输出 重定向到 标准输出,而这里的标准输出已经重定向到hzqout.txt文件,也就是说标准的错误提示也直接输出到out.file文件中,所以就没有提示了,也就不用再打回车了。

  • 另外,如果你的后台任务没有输出,你可以直接重定向到/dev/null
● 例子3:用ctrl+z、jobs和bg
hzq@ubuntu:~$ ./hzqtest8.sh
2019年 10月 25日 星期五 23:56:15 CST
2019年 10月 25日 星期五 23:56:16 CST
2019年 10月 25日 星期五 23:56:17 CST
2019年 10月 25日 星期五 23:56:18 CST
^Z[3]   已完成               nohup ./hzqtest8.sh > /dev/null 2>&1

[4]+ 已停止 ./hzqtest8.sh
hzq@ubuntu:~$ jobs
[4]+ 已停止 ./hzqtest8.sh
hzq@ubuntu:~$ bg 4
[4]+ ./hzqtest8.sh &
hzq@ubuntu:~$ 2019年 10月 25日 星期五 23:57:04 CST
2019年 10月 25日 星期五 23:57:05 CST
2019年 10月 25日 星期五 23:57:06 CST
2019年 10月 25日 星期五 23:57:07 CST
2019年 10月 25日 星期五 23:57:08 CST
2019年 10月 25日 星期五 23:57:09 CST

[4]+ 已完成 ./hzqtest8.sh
hzq@ubuntu:~$

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

 功能:上面的例子中脚本命令事先已经正常执行,然后你可能发现这个任务执行时间比较长,一直独占着终端窗口的使用,很不方便。

 ctrl+z命令可以将当前的前台任务转后台,也就是放到后台任务池中了,这个时候前台窗口就变成非阻塞状态了,但是要注意转过去的任务在后台默认是冻结状态。从上面例子中可以看出任务输出了4行之后中断了。

 这个时候需要用到bg命令,bg命令的功能就是将后台冻结的任务再次运行起来,但是它需要一个任务ID号,而jobs命令就是查看所有任务状态的,包括ID号。

 例子中的bg 4就是当前任务号码。

 该例子中没有使用nohup,有需要的同学可以自行加上,包括重定向都是可以加上的。

● 例子4:用disown、jobs和&

 上面的例子中没有使用nohup命令,所以当终端环境强行退出时,后台正在执行的任务(作业/命令/程序/脚本)也会退出,由于各种原因你可能想事后加上nohup的功能(忽略终端关闭信号),看下面的例子。

hzq@ubuntu:~$ ./hzqtest8.sh >hzqout.txt 2>&1 &
[1] 7168
hzq@ubuntu:~$ jobs
[1]+  运行中               ./hzqtest8.sh > hzqout.txt 2>&1 &
hzq@ubuntu:~$ disown -h %1
hzq@ubuntu:~$ 

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

 功能:disown也是隔离终端挂断信号,但主要用于事后使用。上面执行完disown之后,你可以强行关闭终端窗口,然后等待1分钟后去查看重定向文件hzqout.txt看看有没有执行成功,如果成功里面有完整的10条信息,并且是连续的。下面的结果可以看到已经成功执行了。

hzq@ubuntu:~$ ps -ef |grep hzqtest
hzq        7166   7152  0 01:11 pts/1    00:00:00 grep --color=auto hzqtest
#确认后台进程已经执行完毕退出,后面会解释用法。
hzq@ubuntu:~$ cat hzqout.txt
2019年 10月 26日 星期六 01:11:16 CST
2019年 10月 26日 星期六 01:11:20 CST
2019年 10月 26日 星期六 01:11:24 CST
2019年 10月 26日 星期六 01:11:28 CST
2019年 10月 26日 星期六 01:11:32 CST
2019年 10月 26日 星期六 01:11:36 CST
2019年 10月 26日 星期六 01:11:40 CST
2019年 10月 26日 星期六 01:11:44 CST
2019年 10月 26日 星期六 01:11:48 CST
2019年 10月 26日 星期六 01:11:52 CST
hzq@ubuntu:~$ 

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
● 例子5:用setsid和&
hzq@ubuntu:~$ setsid ./hzqtest8.sh &
[1] 3001
hzq@ubuntu:~$ 2019年 10月 26日 星期六 16:27:09 CST
2019年 10月 26日 星期六 16:27:11 CST
2019年 10月 26日 星期六 16:27:13 CST
2019年 10月 26日 星期六 16:27:15 CST
2019年 10月 26日 星期六 16:27:17 CST
2019年 10月 26日 星期六 16:27:19 CST
2019年 10月 26日 星期六 16:27:21 CST
2019年 10月 26日 星期六 16:27:23 CST
2019年 10月 26日 星期六 16:27:25 CST
2019年 10月 26日 星期六 16:27:27 CST

[1]+ 已完成 setsid ./hzqtest8.sh
hzq@ubuntu:~$

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

 功能:setsid是重新创建一个会话进程来执行任务。setsid可以起到和nohup类似的效果,但是setsid更彻底,所以严格上说setsid不是忽略终端关闭信号,而是这个后台任务创建之后就与当前终端没有关系了,所以当前终端的关闭自然不会影响到它。

 同然的原理,大家估计已经想到了,jobs命令在这个时候是不起作用的。

 另外,和nohup还有一个区别就是,不用多打一个回车,因为它没有提示信息。

● 例子6:用 小括号/圆括号 和&
hzq@ubuntu:~$ (./hzqtest8.sh &)
hzq@ubuntu:~$ 2019年 10月 26日 星期六 23:58:26 CST
2019年 10月 26日 星期六 23:58:28 CST
2019年 10月 26日 星期六 23:58:30 CST
2019年 10月 26日 星期六 23:58:32 CST
2019年 10月 26日 星期六 23:58:34 CST
2019年 10月 26日 星期六 23:58:37 CST
2019年 10月 26日 星期六 23:58:39 CST
2019年 10月 26日 星期六 23:58:41 CST
2019年 10月 26日 星期六 23:58:43 CST
2019年 10月 26日 星期六 23:58:45 CST
hzq@ubuntu:~$ 

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

 功能:小括号可以起到和setsid类似的效果,小括号是创建一个独立shell来执行命令,当前的后台任务创建之后就与当前终端没有关系了,所以终端的关闭也不会影响到它。

 同然的原理,jobs命令在这个时候是不起作用的。

 另外,和setsid一样,圆括号执行命令不用多打一个回车,因为它没有提示信息。

4、查看后台任务的命令

 常用的有jobs和ps命令,区别是jobs用于查看当前终端后台运行的任务,换了终端就看不到了(包括关闭终端再重新打开也看不到的)。而ps命令用于查看全局所有后台进程的信息,当然可以看到别的终端运行的后台任务。

1)jobs命令
功能:查看当前终端任务信息

hzq@ubuntu:~$ jobs -l
[1]-  3427 运行中               nohup ./hzqtest8.sh &
[2]+  3445 运行中               nohup firefox &

 
  • 1
  • 2
  • 3

jobs -l选项可以多显示一个PID信息。
第一列:任务序号,注意并不是PID。
第二列:+ 号表示当前顶部任务,- 号其次任务,没符号是其他任务。
第三列:PID(上面例子中,默认情况下没有PID)。
第四列:状态,四种(运行中,已停止,已完成,已杀死)。
第五列:任务名称(即刚才运行的命令)。

2)ps命令
功能:全局查看进程信息

hzq@ubuntu:~$ ps -ef |grep gedit
root       3791   2566  0 00:29 pts/0    00:00:00 sudo gedit
root       3792   3791  0 00:29 pts/0    00:00:00 gedit
root       3802   2566  0 00:30 pts/0    00:00:00 sudo gedit
root       3803   3802  0 00:30 pts/0    00:00:00 gedit
hzq        3820   2566  0 00:44 pts/0    00:00:00 grep --color=auto gedit

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

 ps命令是Process Status的缩写,功能比较强大,参数非常多,尤其与其他命令组合时可以完成很复杂的操作。
 ps -ef |grep hzqtest是常见用法之一,
 e:表示列出所有进程,f:表示输出完整格式,
 grep hzqtest:表示过滤筛选“hzqtest”关键字。
 上面例子中,第一列:用户名,第二列:PID,第三列:父级PID,最后一列:命令名称或路径

5、关闭后台任务的命令

 处于linux后台的任务有几种关闭方式:任务运行完毕自行退出;通过交互方式退出(包括传入参数对话,界面操作,终端ctrl+c等);通过进程管理工具杀掉;关闭系统退出等。

 kill命令:属于进程管理工具,功能:杀掉进程。

hzq@ubuntu:~$ jobs
[2]   已停止               nohup firefox
[3]-  已停止               nohup sudo gedit
[4]+  已停止               nohup sudo gedit
hzq@ubuntu:~$ kill -9 %2

[2] 已停止 nohup firefox
hzq@ubuntu:~$ jobs
[2] 已杀死 nohup firefox
[3]- 已停止 nohup sudo gedit
[4]+ 已停止 nohup sudo gedit
hzq@ubuntu:~$ jobs
[3]- 已停止 nohup sudo gedit
[4]+ 已停止 nohup sudo gedit

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1)上面的例子中先通过jobs命令查看任务号,然后通过任务号%N杀死进程!最后再次查询发现jobs中的任务已经减少了。
hzq@ubuntu:~$ ps -ef |grep gedit
root       3791   2566  0 00:29 pts/0    00:00:00 sudo gedit
root       3792   3791  0 00:29 pts/0    00:00:00 gedit
root       3802   2566  0 00:30 pts/0    00:00:00 sudo gedit
root       3803   3802  0 00:30 pts/0    00:00:00 gedit
hzq        3829   2566  0 00:59 pts/0    00:00:00 grep --color=auto gedit
hzq@ubuntu:~$ sudo kill -9 3791
[sudo] hzq 的密码: 
[3]-  已杀死               nohup sudo gedit
hzq@ubuntu:~$ ps -ef |grep gedit
root       3792    912  0 00:29 pts/0    00:00:00 gedit
root       3802   2566  0 00:30 pts/0    00:00:00 sudo gedit
root       3803   3802  0 00:30 pts/0    00:00:00 gedit
hzq        3835   2566  0 01:01 pts/0    00:00:00 grep --color=auto gedit

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 2)上面的例子中先通过ps命令查看任务PID,然后通过PID杀掉进程,注意上面例子中使用了管理员权限。
  • 3)如果你的任务还没有转到后台运行,那么直接Ctrl+c 就可以终止了。或者你也可以将后台任务转到前台然后执行ctrl+c来终止。该方法可参考下面举例。

6、前后台任务的转换

1)fg命令
功能:将后台中的任务调至前台并继续运行。

hzq@ubuntu:~$ jobs
[1]-  运行中               nohup gedit &
[2]+  运行中               nohup ./hzqtest8.sh &
hzq@ubuntu:~$ fg 1
nohup gedit

 
  • 1
  • 2
  • 3
  • 4
  • 5

先通过上面介绍的jobs命令查看任务信息,然后用fg N将选中的任务调到前台,跳到前台之后终端界面被阻塞,此时终端不能做别的事情了。

2)Ctrl + z 命令
功能:将正在前台执行的命令作业放到后台,并冻结运行状态。

hzq@ubuntu:~$ ./hzqtest8.sh
2019年 10月 27日 星期日 01:53:31 CST
2019年 10月 27日 星期日 01:53:33 CST
^Z
[3]+  已停止               ./hzqtest8.sh
hzq@ubuntu:~$ jobs
[3]+  已停止               ./hzqtest8.sh

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

例子中先正常运行任务脚本,可以看到刚开始是正常输出的,执行ctrl+z之后,提示任务已停止,用jobs查看任务已在后台并处于停止状态。

3)bg命令
功能:将后台冻结的任务再次运行起来,运行后任务还在后台。

hzq@ubuntu:~$ jobs
[1]+  已停止               ./hzqtest8.sh
hzq@ubuntu:~$ bg 1
[1]+ ./hzqtest8.sh &
hzq@ubuntu:~$ 2019年 10月 27日 星期日 01:58:17 CST
2019年 10月 27日 星期日 01:58:19 CST
2019年 10月 27日 星期日 01:58:21 CST

[1]+ 已完成 ./hzqtest8.sh

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上面例子中先用jobs查看有一个任务处于后台停止状态,执行bg 1之后任务继续在后台运行,并继续输出剩余信息。

最后

 本文以Ubuntu18为测试环境,其他linux版本包括centos、redhat等大多数应该是没问题的,这些命令都是linux通用的命令,如果有细微的效果差异可能是版本和环境的问题,自己可以尝试调整一下。

 另外screen工具也是任务管理常用的工具,它的功能也比较强大,screen是一个屏幕任务进程管理器,也可以将多个任务作业转到后台运行,它是第三方工具,Ubuntu标配没有这个工具,需要另外安装,所以这里就不多说了,有兴趣的朋友可以自己研究一下。(如果有三个以上同学留言需要screen的文章我将再写一篇screen的使用案例介绍哈:)

 欢迎交流分享,讨论补充~ ~

参考文章《Ubuntu桌面启动后自动执行指定的命令或程序的三种方法》
参考文章《vmware虚拟机运行速度卡慢原因分析及解决办法大全(一)》

转载请注明本文地址:https://blog.youkuaiyun.com/davidhzq/article/details/102766881

sudo源码分析(二) 本篇主要分析sudo的信号处理函数。 阅读详情

相关推荐

AndroidSudo:适用于 Android 安装程序的 Sudo

适用于 Android 安装程序的 Sudo 此工具将一个简单的 sudo 脚本安装到您​​的 /system/xbin/。 更多信息: : 下载 Google Play 不适合您? 不想要最新版本? 当前最新版本支持Android 4.0+。 如果您需要在 Android 2.x 上使用它,您可以这是支持 Android 2.2+ 的最后一个版本。 源代码 我在 Eclipse ADT IDE 中处理这个项目。 在那里导入。 它曾经需要 appcompat-v7,但在 此要求已被删除,因为它不再支持 Android 2.x。 错误和测试 它也可能有通用错误(所有设备和版本),或特定设备的错误。 如果你发现了一个 bug,并且你有诀窍,那么 fork 项目,修复它,然后给我一个 pull request,我会考虑修复它。 如果您没有开发技能,请使用问题跟踪器报告它,我会研究修

linux sudo升级(rpm与源码)两种方式

主要针对redhat6/7(含centos6/7)版本的sudo进行升级操作说明,两种方式

IccBoY_超越 1万+

sudocode

数独解算器

【Linux基础】源+sudo+命令

这些是 Linux 系统中最常用的命令,每个命令都有很多选项和参数,可以用于执行各种系统管理和操作任务。熟练掌握这些命令将大大提高你在 Linux 环境中的工作效率。这些命令用于在 Ubuntu 22.04 系统上配置 NVIDIA CUDA 软件包的安装源和下载 CUDA 本地安装包。这些步骤通常是安装 CUDA 开发工具链的一部分。这些命令的目的是设置 CUDA 的 APT 软件源优先级,并下载 CUDA 12.6 的本地安装包文件。.pin。

qq_33673253的博客 1066

Sudo-1

Sudo-1

sud:极简sudo替代

SUD ::超级用户 该软件旨在成为用于特权提升的UNIX工具的一般实现,主要用于教学和节约目的。 它旨在运行SUID,具有“超级用户权限”,可以在其安装的系统上以root用户身份执行操作。 如果内置了PAM支持,则它可能还会要求您输入确认密码。 动机 该软件是对主要Linux和BSD发行版所采用的sudo工具的直接响应,同时增加了其复杂性并。 考虑到我们一直我打算借助SUD最终行动起来并创新这一发展领域。 利弊 SUD并未涵盖替代方案所解决的所有用例,但在少数几种常见情况下,多用户特权隔离是安全操作本地或远程计算机的必要和充分条件。 下面是对现有替代方案的优缺点(缺点)的简短摘要: 与相比的优点: 借助识字开发方法,可以简化审核工作。 更少的代码行,更少的功能,更少的依赖关系。 与相比的优点: 没有配置文件,没有解析器。 与和相比的优点: 基于GID的运行时配置(这并不是真正

sudo源码解析:核心功能实现原理与架构设计

sudo是Linux系统中至关重要的权限管理工具,它允许普通用户以其他用户(通常是root)的身份执行命令。本文将深入解析sudo的核心功能实现原理与架构设计,帮助开发者和系统管理员更好地理解这一工具的内部工作机制。 ## sudo的整体架构设计 sudo采用模块化的插件架构,主要由前端程序和多个插件组成。这种设计使得sudo具有高度的灵活性和可扩展性,可以通过插件实现不同的认证方式、授权策略

gitblog_01001的博客 632

多仓智能订单路由与动态优化方案设计

现在有很多商家会有多个仓库,并分布在不同的城市中,当用户下单后会根据商品库存及订单信息将订单分配到对应的仓库进行发货,如就近原则,本期基于多仓库设计一套订单路由方案,包含核心逻辑、规则优先级和实施方案,适用于多仓协同的订单自动分配场景

14年产品经理老兵,想把自己的经验及总结分享给大家,只讲思路及实操,不讲废话 2477

双系统安装 ubuntu 22.04 + win11(yoga 14s 2021)

考虑到无法完全转向 windows,于是选择双系统安装 ubuntu。文章安装过程主要参考 Ref [1],具体细节会在文中体现。

lurenyi0724的博客 2648

手把手教你用支付宝密钥工具生成RSA2密钥对(含Windows/Mac操作截图)

本文详细介绍了如何使用支付宝密钥工具生成RSA2密钥对,包括Windows和Mac平台的操作步骤与截图。从工具下载、安装到密钥生成、配置支付宝平台,再到开发环境集成实战,手把手教你完成支付宝支付接口对接。特别强调密钥安全管理和最佳实践,帮助开发者避免常见安全隐患。

mongodb5scout的博客 257

利用李雅普诺夫函数开发航天器姿态控制系统

本文基于李雅普诺夫函数控制方法,采用修正罗德里格斯参数(MRP)描述航天器姿态,设计了姿态控制律。通过构造能量型李雅普诺夫函数,推导出保证系统稳定的控制闭环方程,实现了航天器从初始状态到目标状态的稳定转换。针对MRP参数可能出现的奇异性问题,采用影子集进行规避。仿真实验包含两种模式:非追踪模式(目标状态为0)和追踪模式(目标为三角函数轨迹)。结果表明,该控制方法能够有效实现姿态稳定和轨迹跟踪,在短暂调整后即可精确跟随目标轨迹。控制律设计考虑了不同参考系间的转换,通过DCM矩阵处理目标角速度的坐标变换问题。

weixin_50227659的博客 1221

ISO/SAE 21434:2021 第 11 - 14 章 RQ、RC、WP

应提供以下信息:-相关项定义 [WP-09-01];-网络安全目标 [WP-09-03];-网络安全声明 [WP-09-04] (如适用)。

qq_41114013的博客 1145

7、Python高光谱分析工具(PyHAT)简介

Python高光谱分析工具(PyHAT)是一个开源、跨平台的Python库及图形用户界面,用于行星光谱数据的可视化与分析。它支持多种高光谱传感器数据,如火星勘测轨道飞行器的CRISM、月船1号的M3以及SELENE Kaguya SP点光谱仪,提供预处理、衍生产品生成、统计学习和机器学习分析功能。PyHAT基于Pandas和NumPy构建,兼容Jupyter和QGIS环境,旨在解决现有光谱分析方法缺乏开源实现、难以探索性分析和算法分散的问题。其模块化架构涵盖数据输入/输出、通用光谱变换、测绘与点观测工具及高

aa123的博客 138

关于小新pro14 2021版本电脑在win11+cuda11.2环境下,mx450显卡安装pytorch过程参考

不同的显卡都有其最兼容版本的cuda,而要在深度学习中使用pytorch必须安装gpu来进行加速。但是根据网上若干文章来看,我总结出以下关于MX450显卡安装pytorch存在的若干问题本文是通过本人在win11+cuda11.2环境下,安装pytorch过程中存在的主要问题,并通过探索发现对应的解决之道。本文仅供大家参考使用。

qq_31829997的博客 1976

AutosarMCAL开发——基于TC367、EBTresos 开发之PORT

下图为开漏输出与推挽输出电路区别,推挽输出有两个极性相反的mos构成,一个管子导通另一个管子关闭以实现输出高低电平(电流较小不具备驱动能力),开漏输出仅使用一个MOS管,所以在这种模式下只能输出低电平,想要输出高电平需要外部提供(输入电流不可超过引脚最大电流显示否则会烧MCU)开漏输出:输出寄存器为低电平时,经过输出控制电路变成一个高电平,N-MOS导通,低电平从I/O引脚输出,输出寄存器为高电平时,P-MOS和N-MOS都是截止状态,电平无法通过,想要输出高电平需要外接上拉电阻。

qq_45583706的博客 1405

Python爬虫实战:爬取Bilibili和YouTube视频、弹幕和评论

随着视频内容平台的爆发式增长,视频网站成为了人们获取信息、娱乐和知识的重要渠道。在这些平台上,视频、弹幕和评论数据可以为我们提供重要的信息,帮助我们了解用户的行为、视频的受欢迎程度以及内容的互动情况。本篇文章将带你实现一个Python爬虫,用来爬取Bilibili和YouTube上的视频、弹幕、评论等数据。我们将详细介绍爬虫的实现过程,使用最新的Python技术,并且会提供完整的代码。Bilibili网站提供了多种方式来获取视频数据,最直接的方式是通过其开放的API接口来获取视频、弹幕和评论等数据。

2201_76125261的博客 1775

2021-11-14欠一篇

2021-11-14欠一篇

旅程的点点滴滴 367

【LAMMPS学习】五、LAMMPS命令(8) Pair_style 势

所有LAMMPS pair_style命令如下表所示。有些样式有加速版本。这由括号中的附加字母表示:g = GPU, i = INTEL, k = KOKKOS, o = OPENMP, t = OPT。

荷塘阅色 3016
上一篇: git的简单使用
下一篇: ubuntu通过windows代理上网
LPFFFFF
博客等级 码龄9年 347粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值